java—扩展类和实现接口之间的交互

8qgya5xd  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(355)
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,我必须重写 testMyClass 然后回来 Interface.super.test() .
有没有一种方法 Interface::test 方法重写 ClassBase::test 方法,而不手动重写中的方法 MyClass ? (打印2(示例中)

qltillow

qltillow1#

如果层次结构中的任何类都有一个具有相同签名的方法,那么默认方法将变得不相关。默认方法不能重写java.lang.object中的方法。推理非常简单,因为object是所有java类的基类。因此,即使我们在接口中将对象类方法定义为默认方法,它也将是无用的,因为对象类方法将始终被使用。这就是为什么为了避免混淆,我们不能有覆盖对象类方法的默认方法。
结论:默认方法不能重写示例方法。

相关问题