【发布时间】:2019-01-02 08:35:32
【问题描述】:
我在阅读here 中有关 java 8 默认方法时遇到以下段落:
如果层次结构中的任何类具有具有相同签名的方法,则默认方法变得无关紧要。默认方法不能覆盖 java.lang.Object 中的方法。道理很简单,因为 Object 是所有 java 类的基类。因此,即使我们在接口中将 Object 类方法定义为默认方法,它也将毫无用处,因为将始终使用 Object 类方法。这就是为什么为了避免混淆,我们不能使用覆盖 Object 类方法的默认方法。
我很快尝试了以下代码来确认行为
public class DefaultMethodClass {
public void defaultMethod()
{
System.out.println("DefaultMethodClass.defaultMethod()");
}
}
public interface DefaultMethodInterface {
public default void defaultMethod()
{
System.out.println("DefaultMethodInterface.defaultMethod()");
}
}
public class DefaultMethodClassInterfaceChild extends DefaultMethodClass implements DefaultMethodInterface
{
public static void main(String[] args) {
(new DefaultMethodClassInterfaceChild()).defaultMethod();
}
}
这会打印出来
DefaultMethodClass.defaultMethod()
我看不出语言设计者选择这种特定行为的任何具体原因。他们有什么重要的理由让我失踪吗?还是只是接口默认方法在逻辑上的重要性低于超类提供的具体实现?
【问题讨论】:
标签: java java-8 default-method