-1

这是一个措辞奇怪的问题,因此如果重复,我深表歉意。

假设我有一个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

4

2 回答 2

1

它将使用子类中的方法 b。这是覆盖方法的重点。扩展其父类的子类可以自由地创建更具体的方法实现。当在 sublcas 上调用被覆盖的方法时,将使用其专用方法代替超类的方法。

于 2013-03-09T20:33:23.843 回答
0

f 我调用 bar.a(),a 会使用超类的 b 方法还是子类的 b 方法?也就是说,bar.b() 最终会执行 gamma 还是会执行 theta?

它将使用bar.b()方法。这是动态调度的结果。

于 2013-03-09T20:47:02.417 回答