2013-07-17 26 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將被調用。