Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
一方面 ,有时必须从几个类中派生出一个子类,继承它们所有的属性和方法。但是 , Java不支持多重继承。有了接口 ,就可以得到多重继承的效果 。
另一方面,有时必须从几个类中抽取出一些共同的行为特征,而它们之间又没有 is -a的关系,仅是具有相同行为特征而已 。例如 :鼠标、键盘、打印机、 扫描仪、摄像头、充电器、移动硬盘等都支持USB连接 。
接口就是规范,定义的一组则体现了现实世界中“如果你/要... 则必须能 ... ”的思想。继承是一个 "is a"的关系,而接口实现则是 "has a"的关系。
接口的本质是契约,标准规范 ,就像我们的法律一样。制定好后大家都 要遵守 这种设计是将规范。
和实现分离,这也正是Java接口的好处。Java的软件系统会有很多模块组成,那么各个模块之间也应该采用这种面相接口的低耦合,为系统提供更好的可扩展性和可维护性。
定义格式:
【修饰符】 interface 接口名{
}
接口定义的是多个类共同的公共行为规范,这些行为规范是与外部交流的通道,这就意味着接口里通常是定义一组公共方法。
在JDK8之前,接口中只允许出现:
(1)公共的静态的常量:其中public static final可以省略
(2)公共的抽象的方法:其中public abstract可以省略
理解:接口是从多个相似类中抽象出来的规范,不需要提供具体实现
在JDK1.8时,接口中允许声明默认方法和静态方法:
(3)公共的默认的方法:其中public 可以省略,建议保留,但是default不能省略
子类可以选择重写 或者 不重写,方便扩展
(4)公共的静态的方法:其中public 可以省略,建议保留,但是static不能省略
为子类提供 类似 工具类的功能,可以直接调用,实现类的对象无法调用接口中的静态方法,只有当前接口才能调用父接口中的 静态方法
在JDK1.9时,接口又增加了:
(5)私有方法
除此之外,接口中不能有其他成员,没有构造器,没有初始化块,因为接口中没有成员变量需要动态初始化。