• 接口(interface)的概念,掌握接口很重要,以后所有的编程都要面向接口编程。其实接口的内涵就7个字:规范和实现分离。

抽象类是从多个类中抽象出来的模板,若要将这种抽象进行得更彻底,就得用到一种特殊的“抽象类”:接口。

生活中听说过的USB接口其实并不是我们所看到的那些插槽,而是那些插槽所遵循的一种规范;而我们看到的那些插槽是根据USB规范设计出来的实例而已,也就说插槽是USB的实例;对应不同型号的USB设备而言,他们各自的USB插槽都需要遵循一个规范,遵守这个规范就可以保证插入插槽的设备能与主板正常通信;对于同一种型号的主板上的多个USB插槽,他们有相同的数据交换方式,相同的实现细节,可认为他们都是同一个类的不同实例。

  • 接口,类,对象示意图



接口只定义了类应当遵循的规范,却不关心这些类的内部数据和其方法内的实现细节。

接口只规定了这些类里必须提供的方法,从而分离了规范和实现,增强了系统的可拓展性和维护性。





  • interface定义

接口定义一种规范,规定一个类必须做什么,但它不管如何具体去做;

[修饰符] interface 接口名 extends 父接口1,父接口2....

1,没有构造方法,不能实例化

2,接口只能继承接口,不能继承类

3,接口里没有普通方法,方法全是抽象的

4,接口里的方法默认修饰符是public abstract

5,接口里的字段全是全局常量,默认修饰符是public static final

接口里的成员包括:全局常量,公共的抽象方法,内部类(包括内部类,内部接口,内部枚举类)。主要是前两个。

接口的名字,符合标识符就OK,一般的我们习惯在接口名前加上"I"字母,用于区分类和接口,一般的,若接口叫IUSB,习惯上把它的实现类(子类)类写为MouseUSBImpl,主要是方便阅读

  • 使用接口

格式:public class SubImpl  extends Super  implements IA,IB。实现接口(支持多实现)

[修饰符] class 类名 implements 接口1,接口2...

1,接口的实现必须在 extends 之后

2,实现接口的方法必须是 public 类型

3,接口不能创建实例,但是可以声明引用类型的变量。

此时,引用类型的变量必须指向到其实现类对象。

IStudent s = new String();

IStudent s = new StudentImpl();



  • 接口和抽象类



相同点:

1,都位于继承的顶端,用于被其他实现或继承

2,都不能实例化

3,都包含抽象方法,其子类都必须覆写这些抽象方法



区别:

1,抽象类为部分方法提供实现,避免子类重复实现这些方法,提供代码重用性;接口只能包含抽象方法

2,一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)



二者的选用:

优先选用接口,尽量少用抽象类,编程时都是面向接口编程的

需要定义子类的行为,又要为子类提供共性功能时才选用抽象类,其实主要是模板。



linkin大话面向对象--接口的更多相关文章

  1. linkin大话面向对象--类和对象

    我们每天在撸码,那么我们在敲什么东西呢?明显的我们在写类,写一个类,写一个接口,写某个接口里面写一些属性,在某个类里面写一个方法,然后以一个对象调用方法,对于j2ee来讲的话,可能还会写一些jsp,静 ...

  2. linkin大话面向对象--闭包和回调

      先来理解2个概念:闭包和回调   什么是闭包? 闭包是一个可调用的对象,它记录了一些信息,这些信息来自于创建他的作用域.通过这个定义,可以看出内部类是面向对象的闭包,因为他不仅包含了外部类对象的信 ...

  3. linkin大话面向对象--内部类

    内部类说白了就是类中有类 内部类:嵌套类 外部类:宿主类 内部类主要有以下作用:记住了3个字:多继承... 1,内部类提供了更好的封装,可以把内部类隐藏在外部类中,不允许同一个包中的其他类访问该类. ...

  4. linkin大话面向对象--枚举

    枚举类(enum) 其实我们使用到枚举的地方还是很多的,其实我们可以完全人工的来实现枚举的功能.比如说我现在手里的项目我就是自己实现的枚举,说白了,枚举就是一个类的多例模式. 1,使用enum声明,默 ...

  5. linkin大话面向对象--多态

    java引用变量有2个类型,一个是编译时类型,一个是运行时类型: 编译时类型:声明的类型,把它看做是什么东西 运行时类型:真正的类型,实际上指的是什么东西 如果编译时类型和运行时类型不同,就出现多态. ...

  6. linkin大话面向对象--包和导入

    我们现在的代码都扔在一个文件夹里面,比如以后我们做项目,是不是有可能有非常非常多的代码,那我就希望把不同功能和模块的类方便管理,放到不同的文件夹下,引出包概念. 什么是包,就一个文件目录,为了处理重名 ...

  7. linkin大话面向对象--GC和jar包

    GC java的垃圾回机制是java语言的重要机制之一.当程序创建对象,数组等引用类型实体时,系统都会在堆内存中为之分配一块内存区,对象就保存在这块内存区中.当这块内存不再被任何变量引用时,这块内存就 ...

  8. linkin大话面向对象--包装类

    Java提倡的万物皆对象,但是数据类型的划分出现了基本数据类型和引用数据类型,那么我们怎么能把基本数据类型称为对象呢? 基本数据类型 包装类 byte Byte short Short int Int ...

  9. linkin大话面向对象--java关键字

    java中的关键字有以下几个,他们不能作任何其它的用途. 发现没,java中的关键字全是小写,java是严格区分大小写的. abstract  default  null  synchronized ...

随机推荐

  1. navicat for sqlite 11.1.12 patch 永久试用 不报毒

    因为最近需要用这个但是网上都是注册机没有成功注册,所以就自己动手使用ollydbg开刀,    修改成了永久试用版本. 着急用所以没仔细分析,暂时先这样吧. 这个下载版本 http://dlsw.ba ...

  2. python 单下划线/双下划线使用总结

    文章转自:http://blog.csdn.net/pfm685757/article/details/45918575

  3. python 版本管理工具 pyenv 使用备忘

    安装步骤 安装 xcode-select 以及 homebrew(前者在安装 git 的时候装过,后者 mac 开发必备无需解释) 安装 pyenv brew install pyenv,用 pyen ...

  4. deeplearning.ai 卷积神经网络 Week 2 深度卷积网络:实例研究 听课笔记

    1. Case study:学习经典网络的原因是它们可以被迁移到其他任务中. 1.1)几种经典的网络: a)LeNet-5(LeCun et al., 1998. Gradient-based lea ...

  5. ex_gcd(个人模版)

    ex_gcd: #include<stdio.h> #include<string.h> using namespace std; int x,y; int ex_gcd(in ...

  6. BZOJ 1303: [CQOI2009]中位数图【前缀和】

    1303: [CQOI2009]中位数图 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2737  Solved: 1698[Submit][Statu ...

  7. HDU--2017

    字符串统计 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  8. 【LeetCode】476. Number Complement (java实现)

    原题链接 https://leetcode.com/problems/number-complement/ 原题 Given a positive integer, output its comple ...

  9. 010 有顺序的Map的实现类:TreeMap和LinkedHashMap

    作者:nnngu GitHub:https://github.com/nnngu 博客园:http://www.cnblogs.com/nnngu 简书:https://www.jianshu.com ...

  10. [国嵌攻略][171][V4L2图像编程接口深度学习]

    V4L2摄像编程模型 1.打开摄像头设备文件 2.获取驱动信息-VIDIOC_QUERYCAP 3.设置图像格式-VIDIOC_S_FMT 4.申请帧缓冲-VIDIOC_REQBUFS 5.获取帧缓冲 ...