如果子 class 和父 class 都实现相同的接口,为什么只有父 class 被迫添加未实现的方法?

If a child class and parent class both implement the same interface, why is it only the parent class that is forced to add unimplemented methods?

我在 AnimalActions 接口下面有三个 classes,另外两个 classes AnimalHuman[=29 的父级=]

AnimalActions界面如下:

public interface AnimalActions {

  public String greeting(); // how an animal says hello

  public String angryAction(); // how an animal says "im angry"

  public String happyAction(); // how an animal says "im happy"
}

当我有 class Animal 实现时 AnimalActions 我得到一个编译器错误,迫使我添加未实现的方法,所以 Class 需要看起来像这个:

public class Animal implements AnimalActions {

  @Override
  public String greeting() {
    return "default greeting";
  }

  @Override
  public String angryAction() {
    return "default angry action";
  }

  @Override
  public String happyAction() {
    return "default happy";
  }

}

但是当我创建一个扩展 Animal 并实现 AnimalActions 的 class Human 时,没有编译器错误迫使我覆盖这些方法。这对 Eclipse 来说是完全可以接受的。

public class Human extends Animal implements AnimalActions{

}

但是,如果我愿意,我可以添加未实现的方法并从 Animal 更改它们。我只是没有被迫这样做。

奇怪的是,如果我从这个 class 中删除 extends Animal,那么我将被迫添加未实现的方法。为什么我不会被迫添加未实现的方法?

每次我认为我掌握了 OOP 时,我都会对这样奇怪的事情感到困惑。让父子 class 实现相同的接口完全是“无稽之谈”吗?只有 extends Animal 会更好吗?

非常感谢。我知道有人问过这个问题 here 是同一个问题,但是没有代码可以解决问题或答案,所以对我来说有点抽象。

这仅仅是因为子级可以访问所有父级方法,以及来自接口的重写方法。 您可以再次覆盖这些方法,但是如果您需要调用父实现,则需要调用 super.someMethod()