2014-03-30 161 views
2

嘿,我試圖調用子類方法(ChildClass擴展父類())繼承不能調用子類方法

SuperClass s=new ChildClass(); 
s.childClassMethod(); 

它沒有看到ChildClass方法唯一的方法我可以調用的從父類() 我知道這是propably一個愚蠢的問題,但無論如何歡呼

回答

5

這是正確的,你不能看到它,因爲sSuperClass類型,它沒有這種方法 - 這顯然會打破Polymorphism的原則。

因此您必須更改代碼,如((ChildClass) s).childClassMethod();或使sChildClass類型。

2

編譯器不知道什麼情況下該基準是在運行時指向這樣只會讓你在編譯時

訪問超類的訪問的方法

2

這是因爲超類沒有這種方法。

如果您希望超類能夠調用該方法,則需要將其抽象化並賦予該方法。

子類是超類的形式,超類不是子類的形式。

+0

我看到所以如果我將在超類中創建一個空方法它將工作? –

+0

@ user1840040是的,但是你必須做出超類抽象,你也可以在超類中創建方法,然後在子類 – Gabs00

+0

中覆蓋它, –

2

家長不知道任何有關孩子擁有的任何新方法。

public class SuperClass { 
    // I have no method named "childClassMethod"... 
} 

public class ChildClass { 
    public void childClassMethod() { 
     // Do something. 
    } 
} 

SuperClass不知道childClassMethod()。您將不得不爲這兩個類提供接口,或者將該方法添加到父級,並在子級中覆蓋它。

或者,您可以簡單地將對象轉換爲其他人所建議的子類,但這可能是不安全的。

((ChildClass) s).childClassMethod()