这是一个措辞奇怪的问题,所以如果它重复,我会道歉。
假设我有一个方法foo
的课程a
调用方法b
:
public class foo
{
public void a()
{
b();
}
public void b()
{
gamma();
}
}
现在我有一个扩展bar
foo
public class bar extends foo
{
@Override
public void b()
{
theta();
}
}
如果我致电bar.a()
,a
会使用超类中的b
方法还是子类中的b
方法?也就是说,bar.b()
会最终执行gamma
还是会最终执行theta
?
答案 0 :(得分:1)
它将使用子类中的方法b。这是重写方法的重点。扩展其父级的子类可以自由地创建方法的更具体的实现。当在sublcass上调用重写方法时,将使用其专用方法代替超类的方法。
答案 1 :(得分:0)
f我调用bar.a(),将使用超类或b中的b方法 从子类的方法?也就是说,bar.b()最终会执行gamma 还是会最终执行theta?
它将使用bar.b()
方法。这是 dynamic dispatch。