如果子 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 Animal
是 Human
[=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()
。
我在 AnimalActions
接口下面有三个 classes,另外两个 classes Animal
是 Human
[=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()
。