java在多级继承中调用方法的哪个版本?
情况:假设我有一个类a、一个扩展了a的类B和一个扩展了B的类C。类a有一个方法hello(),它在类B中被重写
事件:现在C类调用hello()
问题:将调用哪个版本?我猜它将属于层次结构中正上方的类,即B。在任何情况下,如何从C访问hello()的不同版本
相关问题:通过使用super,我们可以访问层次结构中正上方的版本,但如何访问层次结构中更高的版本?例如,如何从C访问A的hello()
你可以在下面搜索框中键入要查询的问题!
情况:假设我有一个类a、一个扩展了a的类B和一个扩展了B的类C。类a有一个方法hello(),它在类B中被重写
事件:现在C类调用hello()
问题:将调用哪个版本?我猜它将属于层次结构中正上方的类,即B。在任何情况下,如何从C访问hello()的不同版本
相关问题:通过使用super,我们可以访问层次结构中正上方的版本,但如何访问层次结构中更高的版本?例如,如何从C访问A的hello()
# 1 楼答案
不能。只有
B
中的代码才能使用super
调用A.hello()
;如果A、B和C都要实现hello()
,那么C中的任何代码都不可能访问A.hello()
一般来说,任何类中的代码都可以调用它自己的方法版本,以及它的直接超类的版本,就是这样。如果没有超类的合作,就无法调用任何其他对象
# 2 楼答案
动态方法调度 动态方法分派是一种机制,通过这种机制,在运行时而不是编译时解析对重写方法的调用。动态方法分派很重要,因为这是Java实现运行时多态性的方式。 超类引用变量可以引用子类对象。Java使用这个事实在运行时解析对重写方法的调用。这里是如何。当通过超类引用调用重写的方法时,Java会根据调用时引用的对象的类型确定要执行该方法的哪个版本。因此,该确定是在运行时进行的。当引用不同类型的对象时,将调用重写方法的不同版本。换句话说,正是被引用对象的类型(而不是引用变量的类型)决定了将执行哪个版本的重写方法。因此,如果超类包含被子类重写的方法,那么当通过超类引用变量引用不同类型的对象时,将执行该方法的不同版本
例如: 甲级
{
}
B类扩展了A类
{
}
C类扩展到B类
{
}
类歧义
{
}
# 3 楼答案
如何从Xyy show方法调用Abcd show方法