Java 8中的默认实现VS继承方法

时间:2014-04-17 14:25:44

标签: java inheritance

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

1 个答案:

答案 0 :(得分:3)

  • 这甚至可以编译吗?

  • 如果是这样的话,什么时候会被打印出来??

它会打印MyAbstract

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

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