什么时候应该在子类中覆盖超类的方法?如果没有额外的功能,是否必须重写所有超类的方法?



我有一个继承超类的超类和子类。超类包含 6 个方法,但我的子类只有 1 个超类方法的不同实现,需要被覆盖。我是否仍然必须通过执行来覆盖子类中剩余的 5 个方法,即;

@Override
public void someMethod(String someString) {
    super.someMethod(someString);
}

我觉得这样做是多余的,但是在子类中调用 someMethod 时,如果未被覆盖,它会执行超类的方法还是会出现错误?我不确定什么是好的编程实践,因为我是Java的新手。

不,如果您不更改其他方法的实现,则不必覆盖其他方法,这就是继承的含义。这是重用代码以避免重复自己的好习惯。

在子类中调用 someMethod 时,它会执行超类的 方法,如果未覆盖或会出现错误?

是的,会的。除非调用的方法对子类可见,否则不会引发任何错误。

根据官方的 Oracle 文档,

子类重写

方法的能力允许类从行为"足够接近"的超类继承,然后根据需要修改行为。重写方法与它重写的方法具有相同的名称、参数数量和类型以及返回类型。重写方法还可以返回重写方法返回的类型的子类型。此子类型称为协变返回类型。

重写方法时,您可能希望使用@Override 指示编译器要重写的注释 超类中的方法。如果由于某种原因,编译器检测到 该方法不存在于其中一个超类中,那么它 将生成错误。

所以我建议阅读官方文件。

最新更新