假设我有一个名为Person
的班级。
然后我创建了一个名为Adult
的子类(所以成年人会extend Person
)
最后,我创建了一个名为Adult
的{{1}}类的子类(因此Teacher
将Teacher
)
如果extend Adult
类有toString
方法(@Override
),那么所有子类(Person
和Teacher
)都必须拥有Adult
方法?
如果某个toString
方法特定于toString
,另一个Person
特定于toString
类,我该如何引用Adult
方法使用toString
引用的Teacher
类中的Adult
类? (所有super
被覆盖)
答案 0 :(得分:0)
我将通过重命名A,B和C类来简化您的问题.B扩展A. C扩展B。
对于你的第一个问题:如果A有一个公共doSomething
方法,那么由于继承,B和C也有一个doSomething方法。他们不必声明或实现它,但如果他们希望覆盖功能并且方法不是最终的,那么可能。
对于你的第二个,你不能参考超级超级。例如,C不能调用super.super.doSomething期望引用A中的doSomething,绕过B中的doSomething。通过选择扩展B,你可以随之获取所有的瑕疵,包括它在doSomething中选择做的任何事情。实现。如果你需要在C中引用A的doSomething,那么也许你扩展了错误的类。这里有一些很好的答案:Why is super.super.method(); not allowed in Java?
答案 1 :(得分:0)
如果Person类有一个toString方法(覆盖),则全部执行 子类(老师和成人)必须有一个toString方法?
通过继承,Person的所有子类(子)自动拥有一个toString方法,但返回一个Person(父)字符串而不是当前类(子)。
如果Employe扩展Person,那么你可以调用employe.toString()并返回Person类的实现。