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

标签 java inheritance

在 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/

相关文章:

java - 来自 Socket 的 DataInputStream 的 "available"

java - 在不使用准备语句的情况下防止 JDBC 中的 SQL 注入(inject)

c++ - 使用基接口(interface)类参数将派生类对象添加到 vector 中

c++ - 是否可以从派生类向基类 A 添加类成员?

c++ - 为什么我在使用 memset 用零填充对象后在 dynamic_cast 处出现异常

java - 如何针对不同情况从模拟方法返回多个值?

java - IntelliJ 中缺少架构定义

java - GWT 设计器不起作用

java - 具有 Inheritance.JOINED 的 Spring Data Repository

c++ - 在 OpenMP 缩减中使用多态类型