Java的继承和超级引用

Java的继承和超级引用,java,inheritance,Java,Inheritance,假设我有一个名为Person的类。 然后我创建了一个名为maintal的子类(这样一个成年人将扩展Person) 最后,我将成人类的子类命名为教师(因此教师将扩展成人) 如果有Person类的toString方法(@Override),那么所有的子类(Teacher和main)都必须有toString方法吗 如果有一个toString方法专门针对Person和另一个toString方法专门针对成人类,我如何使用super参考从成人类中引用toString方法?(所有toStrings都被覆盖)我

假设我有一个名为
Person
的类。 然后我创建了一个名为
maintal
的子类(这样一个成年人将
扩展Person
) 最后,我将
成人
类的子类命名为
教师
(因此
教师
扩展成人

如果有
Person
类的
toString
方法(
@Override
),那么所有的子类(
Teacher
main
)都必须有
toString
方法吗


如果有一个
toString
方法专门针对
Person
和另一个
toString
方法专门针对
成人
类,我如何使用
super
参考从
成人
类中引用
toString
方法?(所有
toString
s都被覆盖)

我将通过重命名类A、B和C来简化您的问题。B扩展了A。C扩展了B

对于第一个问题:如果A有一个公共的
doSomething
方法,那么由于继承,B和C也有一个doSomething方法。他们不必声明或实现它,但是如果他们希望覆盖功能,并且方法不是最终的,他们可以这样做

第二,您不能引用super的super。例如,C无法调用super.super.doSomething,希望引用A中的doSomething,绕过B中的doSomething。通过选择扩展B,您可以将所有的缺点都带到它身上,包括它在doSomething实现中选择执行的任何操作。如果需要从C中引用A的doSomething,那么可能扩展了错误的类。对于这个问题,这里有一些很好的答案:

如果Person类有一个toString方法(重写),那么 儿童班(老师和成人)必须有toString方法吗

通过继承,Person的所有子类(子类)自动拥有一个toString方法,但返回一个Person(父类)字符串,而不是当前类(子类)


如果Employe扩展Person,则可以调用Employe.toString()并返回Person类上实现的值。

让学生扩展教师没有任何意义。这是说所有的学生都是老师。“所有的子类(老师和学生)都必须有toString方法吗?”——
toString
是从
Object
继承的,所以(从技术上讲),他们都有这个方法。如果
Person
覆盖
toString
,那么当您调用
Teacher\toString
Student\toString
时,他们将使用
Person\toString
。如果您希望更改
Person#toString
changes@cricket_007“所以学生会扩展人”-我认为这是打字错误/对OP的误解-这样或那样,令人困惑(参考Nathan所说的),我理解正确吗?您想在调用
教师的
类版本的
toString
成人
类中编写代码吗?如果是这样,那么当您调用
toString
时,如果您正在调用它的对象是
教师
,就会发生这种情况。如果它不是
教师
,那么调用
教师
类的方法就没有意义,因为该方法可能引用只存在于
教师
类中的方法(如
throwChalk
),非常感谢!这帮了大忙