Java的继承和超级引用

时间:2016-03-13 05:11:41

标签: java inheritance

假设我有一个名为Person的班级。 然后我创建了一个名为Adult的子类(所以成年人会extend Person) 最后,我创建了一个名为Adult的{​​{1}}类的子类(因此TeacherTeacher

如果extend Adult类有toString方法(@Override),那么所有子类(PersonTeacher)都必须拥有Adult方法?

如果某个toString方法特定于toString,另一个Person特定于toString类,我该如何引用Adult方法使用toString引用的Teacher类中的Adult类? (所有super被覆盖)

2 个答案:

答案 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类的实现。