在Java官方网站的教程页面中,通过一个例子来说明两个接口定义了相同的默认方法
startEngine()
。类FlyingCar
实现了这两个接口,并且因为明显的冲突必须覆盖startEngine()
方法。public interface OperateCar {
// ...
default public int startEngine(EncryptedKey key) {
// Implementation
}
}
public interface FlyCar {
// ...
default public int startEngine(EncryptedKey key) {
// Implementation
}
}
public class FlyingCar implements OperateCar, FlyCar {
// ...
public int startEngine(EncryptedKey key) {
FlyCar.super.startEngine(key);
OperateCar.super.startEngine(key);
}
}
我不明白为什么在 FlyingCar
中,super
被用来引用 OperateCar
和 FlyCar
接口中的 startEngine()
,因为据我所知,startEngine()
没有在任何父类中被定义,因此不应该被视为驻留在其中的一个。我也看不出 super
与 FlyingCar
中实现的这两个接口之间有任何关系。
super
单独使用时表示超类。FlyCar.super
是 Java 8 中的新特性,表示在接口FlyCar
中的实现。 - user253751