首页 > 解决方案 > 为什么在接口中定义但在类中没有实现的这个方法可以被调用?

问题描述

说这里我有一个 Java 接口 Eat:

public interface Eat {
    default void eat(Meat meat) {}

    @Deprecated
    default void eat(Meat meat, Mood mood) {}
}

而且我有一个抽象类在接口中只实现一个方法:

public abstract class DogBase implements Eat {
    @Override
    public void eat(Meat meat) {}
}

我有一个类扩展了抽象类:

public class Dog extends DogBase {

}

然后我发现在 Dog 类的单元测试中,不推荐使用的方法:

@Deprecated
default void eat(Meat meat, Mood mood) {}

接口 Eat 中定义的可以被 Dog 类的对象调用。

为什么这可能?在我的理解中,抽象类 DogBase 只实现了接口中定义的非弃用方法,因此 Dog 类不应该有弃用的方法。

标签: javaabstract-class

解决方案


推荐阅读