Java面向对象之接口——interface
java
通常计算机中的接口分为硬件接口和软件接口。编程
Java
中表示一种特殊的类,是具备的N个方法的特征集合,表示一种规范;还有一种状况数据接口,表示客户端和服务端之间的数据交互的方式。好比,显示器中封装了不少电子元器件,这些元器件链接在一块儿为显示器的正常共工做提供支持,那么显示器如何与外界的其余设备(如电脑主机、外放音响、耳机等设备)通讯交互呢?也是经过显示暴露的通讯接口——显示器上暴露的“孔”。经过链接这些“孔”,其余设备就能和显示器一块儿工做,可以获取显示器中的信息数据,也可以为显示器提供一些显示器不具有的功能,好比:优质的音响效果。spa
接口的设计目的:从上述的显示器例子中,不难发现,接口能够看做是设备和设备之间的通讯桥梁,经过交换数据完成通讯。接口表示一种规范/约束/实现者必须遵循的规范,目的就是用来约束使用者应该怎么作。那若是没有这些规范(接口),会出现什么样的问题?设计
手机的充电器就是接口的实际应用的一个极好的例子。在现在这个智能机泛滥的年代,不知道你们有没有怀念当年功能机和山寨机横行的年代;在那些年代,手机之间的充电设备,各个品牌有各个品牌的“特点”,各个品牌均不同。3d
若是充电设备丢了,或者损坏了,每每要花费很大的代价才能才能买到新的,因此在当时的万能充电器才能流行一时,但其充电效果却并不如人意。由此带来的问题极大的困扰了广大手机用户。code
直到Android系统的出现,统一了充电接口规范后,这个问题才获得了有效解决。由于安卓系通通一了手机充电接口规范,因此几乎全部的Android手机的充电接口是相同的( Micro-USB/Type-c/Lightning
)。固然了,苹果手机是个特立独行的大佬,不在讨论的范围以内。对象
USB接口blog
生活中,USB接口和咱们常常接说的USB插槽实际上是有所误差的,其并非咱们平时所看到的那些USB
插槽,而是那些USB插槽所遵循的一种规范(标准)。USB
的英文是Universal Serial Bus
(通用串行总线),用于规范电脑与外部设备的链接和通信,普遍应用于PC
领域的接口技术。继承
咱们所看到的那些USB
插槽是根据USB
接口规范设计出来的产品,对于不一样型号的USB
设备而言,他们各自的USB
插槽都须要遵循同一个规范,如此能够保证任何插入USB
插槽的设备都能与主板正常通讯。接口
对于同一种型号的主板上的多个USB
插槽,他们有相同的数据交换方式,相同的实现细节;在面向对象的思想中,可认为他们都是同一个类的不一样实例,也就是说USB
插槽是USB
规范的实例。
接口只定义了应当遵循的规范,却并不关心这些规范的内部数据和其功能的实现细节,从而分离了规范和实现,加强了系统的可拓展性和可维护性。这样作的好处:好比,主板上提供了USB
插槽,只要一个遵循了USB
规范的鼠标,就能够插入USB
插槽,并与主板正常通讯,而没必要关心至于这个鼠标的厂商,鼠标内部实现。当鼠标坏了的时候,只须要换个鼠标就行。
Java中的接口,书面解释是多个抽象类的抽象就是接口;通俗点说,在Java
中最小的程序单元是类,而接口实际上是一个特殊的类。和USB
接口同样,Java
中的接口也表示规范,用于定义一组抽象方法,表示某一类事物必须具有的功能,接口的实现类来实现该接口并提供接口中每一个方法的实现。
定义类语法: 权限修饰符 class 类名{}
定义接口语法: 权限修饰符 interface 接口名{}
接口的命名:
able/handler
结尾。如: Walkable.java
IWalkable.java
接口在编译成功以后,和类同样,也是.class
的字节码文件。
接口中的成员:
1.接口中没有构造器,由于接口不能使用new
关键字建立对象(不能 new
);
2.接口中不能定义普通方法,接口中的方法都是默认为公共的抽象方法,并且都是 public abstract
修饰的;因此接口中的方法的public
符 和 abstract
修饰符是能够省略不写的;
3.接口中定义的成员变量,实质是全局静态常量,默认使用 public static final来修饰;
public static final String NAME = "老夫不正经";
4.接口中定义的内部类都是公共的静态内部类,默认使用public static来修饰内部类.
public static interface Openable {}
标志接口:没有任何成员,仅仅提供一个接口定义的接口,其就只是一个标志,如有类实现该接口,则该类就属于接口这一派系。这个使用的很少,了解就好。
常量接口:使用接口来封装多个常量信息,称之为常量接口,其目的和普一般量类相同,但在这里不建议使用。
接口的特色:
public abstract
。public static final
。public static
。接口的继承:
接口只能继承接口,不能继承类,且接口支持多继承(类是单继承关系)。接口继承语法以下:
[修饰符] interface 接口名 extends 接口1,接口2
类和类之间的继承关系用extends
关键字来表示,接口和接口之间也只能是继承关系,也使用extends
关键字来表示。
接口和实现类之间只能是实现关系,并且是类实现接口,用implements关键字来表示。
接口的实现
接口仅仅只是定义了某一类事物应该具备某些功能,可是没有提供任何实现。但在Java 8
以及之后的版本中,接口是能够有默认实现的。此时,咱们定义了一个类,再用该类去实现接口,那么就必须覆盖接口中的方法,提供功能实现,从而实现类接口中定义的功能。
类实现接口:一个类能够实现多个接口,从而也弥补了类的单继承问题。语法以下:
[修饰符] class 实现类名 extends 父类 implements 接口1,接口2{}
接口和实现类之间的关系,称之为"实现关系",使用implements
关键字来表示,但有时候为了方便,也把这个实现关系称之为特殊继承关系。能够这样理解:接口是实现类的父类:实现类就是接口的子类。
接口和实现类的多态关系是在开发中比较常见的多态体现
接口 变量 = 建立实现类对象;//体现了多态思想
接口中的方法是公共的抽象的,因此实现类必须覆盖接口中的方法,而且方法必须使用public
修饰,由于接口中的方法默认就是使用public
修饰的。
接口和抽象类的相同点:
接口和抽象类的不一样点:
Java 8
以前);Java
的单继承);public static final
,抽象类是默认包权限;public abstract
,抽象类默认是默认包访问权限;public static
,抽象类默认是默认包访问权限;若是接口和抽象类能够完成相同的功能,尽可能使用接口,这就是面向接口编程。面向接口编程在于使用多态的好处,把实现类对象赋给接口类型变量,屏蔽了不一样实现类之间的实现差别,从而能够作到通用编程。
案例:使用USB设备来工做。
完结。老夫虽不正经,但老夫一身的才华