2013-07-17 29 views
0

说我有这个超级类:在java中,如果我从子类调用一个调用overriden方法的超类方法,那么将调用哪个类的方法?

public class MySuperClass { 

protected void MyPrMethod() { 
     //Do... 
    } 

    public void MyPuMethod() { 
     MyPrMethod(); 
    } 
} 

这个子类:

public class MySubClass extends MeSuperClass { 
    public MySubClass() {} 

    @Override protected void MyPrMethod() { 
     //Do this instead... 
    } 
} 

然后进入主:

MySubClass mySubClass = new MySubClass(); 
mySubClass.MyPuMethod(); 

哪个MyPrMethod将mySubClass.MyPuMethod()调用?

编辑:我已经downvoted三次了。我现在不能尝试,因为我不在家,虽然现在知道答案会帮助我设计一个我正在制作的程序中的一部分。

+10

试试看! – DannyMo

+0

我不在家,所以现在不能尝试,但如果我现在有了答案,我将能够继续设计我正在制作的程序的一部分。 否则我会尝试它。 –

+1

看到此问题:[http://stackoverflow.com/q/4595512/292442](http://stackoverflow.com/q/4595512/292442) – Rachel

回答

3

由于在子类中覆盖了方法MyPrMethod(),子类的实现将被调用。

被调用的实际方法取决于被调用的对象对象

2

将使用子类的方法版本。当MyPuMethod调用MyPrMethod时,首先检查类(MySubClass)的所需方法,并且只有在未定义父节点时才会递归搜索。我们当前正在执行的方法在不同的类中定义的事实不会改变这一点。

+0

在运行时,不应进行搜索。该对象的类可以引用它支持的虚拟方法的vtable。 –

1

子类MySubClass的MyPrMethod将被调用。