我有一个超类和继承该超类的子类。该超类包含6个方法,但我的子类仅对超类的1种方法有不同的实现,需要对其进行覆盖。我是否仍然需要通过重写子类中的其余5种方法来实现,即;
@Override
public void someMethod(String someString) {
super.someMethod(someString);
}
我觉得这样做是多余的,但是当在子类中调用someMethod时,如果未重写超类的方法,或者它会出现错误,它将执行超类的方法吗?我不知道什么是好的编程习惯,因为我是Java新手。
答案 0 :(得分:0)
不,如果不更改其他方法的实现,则不必重写其他方法,这就是继承的含义。这是重用代码以避免重复的好习惯。
当在子类中调用someMethod时,它将执行超类的 方法,如果它没有被覆盖或会出现错误?
是的,它将。除非您调用的方法对子类可见,否则不会引发任何错误。
答案 1 :(得分:0)
根据官方Oracle documentation,
子类重写方法的能力允许类从行为“足够接近”的超类继承,然后根据需要修改行为。覆盖方法与其覆盖的方法具有相同的名称,数量和参数类型,并且返回类型相同。重写方法还可以返回重写方法返回的类型的子类型。此子类型称为协变返回类型。
覆盖方法时,您可能需要使用@Override 注释,指示编译器您打算覆盖 超类中的方法。如果出于某种原因,编译器检测到 该方法在超类之一中不存在,则它 将产生一个错误。
所以我建议阅读正式文件。