在Java 8中,我们介绍了一个名为" Default Methods"
的功能尝试此操作时,Java的行为如何:
实施doStuff
public interface MyInterface {
default void doStuff() {
System.out.println("MyInterface ");
};
}
一个具有doStuff
public abstract class MyAbstract {
public void doStuff() {
System.out.println("MyAbstract ");
};
}
一个扩展抽象类并实现我的接口的类:
public class MyClass extends MyAbstract implements MyInterface {
//this can just be empty
}
这甚至可以编译吗?如果是这样,将在以下时间打印:
new MyClass().doStuff();
答案 0 :(得分:3)
是
它会打印MyAbstract
如果函数没有在你的类/它的父类中实现,那么只有那时才会执行默认方法。在抽象类中注释掉方法doStuff()
,然后打印出MyInterface
。这样,如果有人将一个默认方法添加到您已经使用类/父类中的方法的相同方法名实现的接口,那么您的实现不会被破坏