在 Java 8 中,我们引入了一个名为“Default Methods”的特性
当我尝试这个时 Java 的行为如何:
具有 doStuff
实现的接口(interface)
public interface MyInterface {
default void doStuff() {
System.out.println("MyInterface ");
};
}
还有一个实现了doStuff
public abstract class MyAbstract {
public void doStuff() {
System.out.println("MyAbstract ");
};
}
还有一个扩展抽象类并实现我的接口(interface)的类:
public class MyClass extends MyAbstract implements MyInterface {
//this can just be empty
}
这甚至可以编译吗?如果是这样,什么时候会打印:
new MyClass().doStuff();
最佳答案
- 这甚至可以编译吗?
是
- 如果是这样,当...时将打印什么?
它将打印MyAbstract
- 当我尝试这个时,Java 的行为如何:
如果该函数未在您的类/其父类中实现,那么并且只有在那时才会执行默认方法。注释掉抽象类中的doStuff()
方法,然后打印出MyInterface
。这样,如果有人将默认方法添加到您已经使用类/父类中方法的相同方法名称实现的接口(interface),则您的实现不会被破坏
关于java - Java 8 中的默认实现 VS 继承方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23135862/