【问题标题】:Default implementations VS inherited methods in Java 8Java 8 中的默认实现 VS 继承方法
【发布时间】:2014-04-17 14:25:43
【问题描述】:

在 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();

【问题讨论】:

  • 您的问题可以通过简单地输入然后尝试编译/运行来回答。我们不需要为您这样做。
  • 暂时不能这样做

标签: java inheritance


【解决方案1】:
  • 这还能编译吗?

是的

  • 如果是这样,当...时会打印什么?

它将打印MyAbstract

  • 当我尝试这个时,Java 的行为如何:

如果该函数未在您的类/其父类中实现,则只有在那时才会执行默认方法。注释掉抽象类中的方法doStuff(),然后打印出MyInterface。这样,如果有人将默认方法添加到您已经使用类/父类中方法的相同方法名称实现的接口,您的实现不会被破坏

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 2022-12-20
    • 2020-07-01
    • 1970-01-01
    相关资源
    最近更新 更多