接口
1.接口的特点
首先看下面的这个抽象类代码:
抽象类代码中变量全为常量,方法全是抽象方法,这样的形式,我们可以将它们定义为接口类,书写方式如下:
接口的语法为:
interface 接口名{
常量或方法
}
接口特点:
- 所有的属性都是公开静态常量
- 所有的方法都是公开抽象方法
- 没有构造方法,类中即使不写也有构造方法,但是接口不能创建对象,所以没有构造方法
- 接口只能声明引用
基于接口特点,在定义接口时实际上需要在定义常量时需要写public static final、定义抽象类时需要写public abstract,但因为在定义接口名称时声明了interface的接口,所有在实际书写过程中可以省略,如下图:
我们可以把接口暂时理解为一种特殊的抽象类,所以类的特征也 同样适用于接口:
- 一个java文件中可以定义多个接口,但是最多只能有一个公 开接口
- 公开接口的接口名必须和java文件的文件名完全相同
- 一个接口编译后会生成一个class文件
2.类与接口的关系
定义一个实现类实现AI接口,因为接口中都是抽象方法,所以在implements时需要实现抽象方法,否则不能编译。
一个类实现接口,如果自己不想成为抽象类,就必须实现接 口中所有声明的方法。
注意:
接口中的方法都是公开的方法,实现类中的方法也必须是公 开的。接口中可以不写public修饰符,但在实现类中需要写public
接口可以声明引用,可以声明方法,可以由实现类实现方法。 抽象类能使用的多态,接口一样可以使用。
3.接口的多继承
接口可以声明引用,可以声明方法,可以由实现类实现方法。 抽象类能使用的多态,接口一样可以使用。那么为什么还要写接口呢?
之前说过Java是单继承语言,但是有接口就可以多继承,解决了继承多个抽象类的问题。如果把接口视为抽象类,则Java实现了多继承。
实现多继承书写方式如下:
虽然Java使用接口实现了所谓的多继承,但是没有影响类和 类之间单继承的特性。Java的单继承指的是类之间的继承关系,不包括接口。
为什么Java不能使用多继承呢?
假设一个场景,两个父类中都存在同名方法test,如果使用多继承,子类在调用test方法时不知道应该调用哪个父类中的test方法。
接口为什么能多继承(多实现)?
因为接口中是抽象类,在实现类中可以覆盖接口中同名的方法,实现类不会出现同名方法。
注意:接口不是用来多继承的,它更多的目的是定制一个标准,实现解耦。
定义一个接口就是定义了一个标准,使用这个接口的类就是标准的使用者,实现了这个接口的类就是这个标准的实现者。 接口的出现,把使用者和实现者之间的直接联系转化为间接 联系,把强耦合转换为弱耦合,从而实现解耦的目的。
电脑就应用了解耦的功能,电脑需要鼠标,但是鼠标可能会坏,所以不能鼠标坏了就更换整个电脑,所以电脑对外提供了一个USB接口,鼠标的连接线只要符合USB接口的标准,就可以在电脑中使用,这就成功解决了电脑与鼠标的紧耦合。显示器、游戏手柄都是如此,只要通过USB接口连接,都可以与电脑交互。