1、接口的特点
- 接口的方法默认是
public abstract
的 - 接口的字段总是
public static final
的 - 一个类可以用
extends
扩展多个接口
2、接口中的方法
- 可以在接口中添加默认方法,用
default
修饰符标记。 - 在 Java 8 中,可以在接口中添加
静态方法
。(该方法只能通过接口调用,不能通过实现类及其对象调用) - 在 Java 9 中,可以在接口中添加
私有方法
,私有方法可以是静态方法或默认方法。
3、默认方法的冲突
解决冲突的规则:
超类与接口冲突,超类优先
。如果超类提供了一个具体方法,则接口中同名且有相同参数类型的默认方法会被忽略。接口与接口冲突,覆盖方法
。如果一个接口提供了一个默认方法,另一个接口提供了一个同名而且参数类型相同的方法(不论是否是默认方法),则必须覆盖这个方法来解决冲突。
下面演示如何解决接口与接口的冲突:
interface inter1 {
default String foo() { return ""; };
}
interface inter2 {
String foo();
}
class demo implements inter1, inter2 {
@Override
public String foo() {
return inter1.super.foo();
}
}
如上所示,我们需要覆盖foo
方法以解决冲突。在覆盖的方法中,我们可以调用接口中的默认方法,调用格式是接口名.super.xxx()
。
4、特殊的接口(待续)
标记接口
(tagging interface):不包含任何方法的接口。
函数式接口
(functional interface):只有一个抽象方法的接口。
如有错误,欢迎指正。.... .- ...- . .- -. .. -.-. . -.. .- -.-- -.-.--