Day Twelve
接口
接口就是一种规范,是一系列方法的声明,是一些方法特征的集合。
一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,然而这些实现可以具有不同的行为(功能)。
注意:
- 可以说是一种特殊的抽象类,里面的方法全是抽象方法。
- 子类在实现接口的时候必须对接口中的方法全部重写。
接口的声明
接口的声明语法格式如下:
修饰符 interface 接口名称 [extends 其他的接口名] {
// 声明变量
// 抽象方法
}
接口的实现
当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。
类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。
实现一个接口的语法,可以使用这个公式:
...implements 接口名称[, 其他接口名称, 其他接口名称..., ...] ...
重写接口中声明的方法时,需要注意以下规则:
- 类在实现接口的方法时,不能抛出强制性异常,只能在接口中,或者继承接口的抽象类中抛出该强制性异常。
- 类在重写方法时要保持一致的方法名,并且应该保持相同或者相兼容的返回值类型。
- 如果实现接口的类是抽象类,那么就没必要实现该接口的方法。
在实现接口的时候,也要注意一些规则:
- 一个类可以同时实现多个接口。
- 一个类只能继承一个类,但是能实现多个接口。
- 一个接口能继承另一个接口,这和类之间的继承比较相似。
Java的接口中有没有构造方法?
- 在接口中,不可以有构造方法。
- 在接口里面写构造方法时,编译器会爆红:Interfaces cannot have constructors
- 构造方法用于初始化成员变量,但是接口中的成员变量是常量,无需修改。接口是一种规范,被调用的时候,主要看的是里面的方法,而方法是不需要进行初始化的。
- 一个类可以实现多个接口,若干个接口都有自己的构造器,不好去决定先调谁的再调谁的。
接口和抽象类的语法区别:
- 接口不能有构造方法,抽象类可以有。
- 接口不能有方法体,抽象类可以有。
- 接口不能有静态方法,抽象类可以有。
- 在接口中凡是变量必须是 public static final修饰,也就是如果有变量的话必须要写死。而在抽象类中没有要求。
注:JDK 1.8 以后,接口里可以有静态方法和方法体了。
注:JDK 1.8 以后,接口允许包含具体实现的方法,该方法称为"默认方法",默认方法使用 default 关键字修饰。更多内容可参考 Java 8 默认方法。
注:JDK 1.9 以后,允许将方法定义为 private,使得某些复用的代码不会把方法暴露出去。更多内容可参考 Java 9 私有接口方法。