public class Main {
public static class ClassBase {
public void test() {
System.out.println("1");
}
}
public static interface Interface {
default void test() {
System.out.println("2");
}
}
public static class MyClass extends ClassBase implements Interface {
}
public static void main(String[] args) {
new MyClass().test();
}
}
在本例中,它将始终打印1。要打印2,我必须重写 test
在 MyClass
然后回来 Interface.super.test()
.
有没有一种方法 Interface::test
方法重写 ClassBase::test
方法,而不手动重写中的方法 MyClass
? (打印2(示例中)
1条答案
按热度按时间qltillow1#
如果层次结构中的任何类都有一个具有相同签名的方法,那么默认方法将变得不相关。默认方法不能重写java.lang.object中的方法。推理非常简单,因为object是所有java类的基类。因此,即使我们在接口中将对象类方法定义为默认方法,它也将是无用的,因为对象类方法将始终被使用。这就是为什么为了避免混淆,我们不能有覆盖对象类方法的默认方法。
结论:默认方法不能重写示例方法。