Java学习笔记(31)--接口 详解(一)
来源:互联网 发布:如何开好淘宝网店 编辑:程序博客网 时间:2024/05/21 10:36
版权声明:本文为博主原创文章,转载请注明出处。
一、基本概念
接口(Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合。接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
如果一个类只由抽象方法和全局常量组成,那么这种情况下不会将其定义为一个抽象类。只会定义为一个接口,所以接口严格的来讲属于一个特殊的类,而这个类里面只有抽象方法和全局常量,就连构造方法也没有。
范例:定义一个接口
- 1
- 2
- 3
- 4
- 5
- 6
二、接口的使用
1、由于接口里面存在抽象方法,所以接口对象不能直接使用关键字new进行实例化。接口的使用原则如下:
(1)接口必须要有子类,但此时一个子类可以使用implements关键字实现多个接口;
(2)接口的子类(如果不是抽象类),那么必须要覆写接口中的全部抽象方法;
(3)接口的对象可以利用子类对象的向上转型进行实例化。
范例:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
运行结果:
- 1
- 2
以上的代码实例化了X类的对象,由于X类是A和B的子类,那么X类的对象可以变为A接口或者B接口对象。我们把测试主类代码改一下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
运行结果:
- 1
好,没任何问题,我们再来做个验证:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
运行结果:
- 1
- 2
- 3
- 4
我们发现,从定义结构来讲,A和B两个接口没有任何直接联系,但这两个接口却拥有同一个子类。我们不要被类型和名称所迷惑,因为实例化的是X子类,而这个类对象属于B类的对象,所以以上代码可行,只不过从代码的编写规范来讲,并不是很好。
2、对于子类而言,除了实现接口外,还可以继承抽象类。若既要继承抽象类,同时还要实现接口的话,使用一下语法格式:
- 1
范例:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
对于接口,里面的组成只有抽象方法和全局常量,所以很多时候为了书写简单,可以不用写public abstract 或者public static final。并且,接口中的访问权限只有一种:public,即:定义接口方法和全局常量的时候就算没有写上public,那么最终的访问权限也是public,注意不是default。以下两种写法是完全等价的:
- 1
- 2
- 3
- 4
等价于
- 1
- 2
- 3
- 4
但是,这样会不会带来什么问题呢?如果子类子类中的覆写方法也不是public,我们来看:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
运行结果:
- 1
- 2
这是因为接口中默认是public修饰,若子类中没用public修饰,则访问权限变严格了,给子类分配的是更低的访问权限。所以,在定义接口的时候强烈建议在抽象方法前加上public ,子类也加上:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
3、在Java中,一个抽象类只能继承一个抽象类,但一个接口却可以使用extends关键字同时继承多个接口(但接口不能继承抽象类)。
范例:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
由此可见,从继承关系来说接口的限制比抽象类少:
(1)一个抽象类只能继承一个抽象父类,而接口可以继承多个接口;
(2)一个子类只能继承一个抽象类,却可以实现多个接口(在Java中,接口的主要功能是解决单继承局限问题)
4、从接口的概念上来讲,接口只能由抽象方法和全局常量组成,但是内部结构是不受概念限制的,正如抽象类中可以定义抽象内部类一样,在接口中也可以定义普通内部类、抽象内部类和内部接口(但从实际的开发来讲,用户自己去定义内部抽象类或内部接口的时候是比较少见的),范例如下,在接口中定义一个抽象内部类:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
在接口中如果使用了static去定义一个内接口,它表示一个外部接口:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
三、接口的实际应用(标准定义)
在日常的生活之中,接口这一名词经常听到的,例如:USB接口、打印接口、充电接口等等。
如果要进行开发,要先开发出USB接口标准,然后设备厂商才可以设计出USB设备。
现在假设每一个USB设备只有两个功能:安装驱动程序、工作。
定义一个USB的标准:
- 1
- 2
- 3
- 4
在电脑上应用此接口:
- 1
- 2
- 3
- 4
- 5
- 6
定义USB设备—手机:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
定义USB设备—打印机:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
定义USB设备—MP3:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
测试主类:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
运行结果:
- 1
- 2
- 3
- 4
- 5
- 6
可以看出,不管有多少个USB接口的子类,都可以在电脑上使用。
在现实生活中,标准的概念随处可见,而在程序里标准使用接口定义的。
未完待续。。。
- Java学习笔记(31)--接口 详解(一)
- JAVA笔记:面向接口编程详解(一)
- Java接口 详解(一)
- Java学习笔记(32)--接口 详解(二)
- Java学习笔记(一)----封装 继承 多态 抽象 接口
- java学习笔记(接口)
- Java数据结构详解(一)-Collection接口
- 菜鸟学习IHttpModule 接口笔记(一)
- JAVA学习笔记(12)--类和对象 详解(一)
- Java学习笔记(14)--String类详解(一)
- java笔记--day09--接口(一)
- java学习笔记<一> 继承与接口
- java学习笔记(二十五)接口
- Java学习笔记(继承、接口)
- Java学习笔记(35)----------Collection接口
- Java接口与抽象(学习笔记)
- Java学习笔记(一)
- Java学习笔记(一)
- 多线程 synchronized(this)与 synchronized(非this)同步代码块的区别
- linux 基础2
- angular过滤器 -- 关键字高亮显示
- 如何将本地的一个新项目上传到GitHub上新建的仓库中去
- mysql大数据:分区功能
- Java学习笔记(31)--接口 详解(一)
- 学习Tensorflow的LSTM的RNN例子
- 9.图像视图ImageView
- 加快AndroidStudio编译速度
- JavaScript中判断日期是否相等
- SESSIONS.ser 的问题
- Docker小技巧(四)——基础概念我的理解
- Java学习笔记(32)--接口 详解(二)
- Unity3D中Layers和LayerMask解析