簡體   English   中英

繼承不能調用子類方法

[英]Inheritance can't call child class method

嘿我正在嘗試調用子類方法(ChildClass擴展SuperClass())

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

它沒有看到ChildClass方法我可以調用的唯一方法來自SuperClass()我知道它可能是一個愚蠢的問題,但無論如何歡呼

那是對的,你看不到它,因為s是類型SuperClass ,沒有這種方法 - 這顯然會破壞多態性原理。

所以你要么像((ChildClass) s).childClassMethod();那樣更改代碼((ChildClass) s).childClassMethod(); 或使sChildClass類型。

編譯器不知道此引用在運行時將指向哪個實例,因此它只允許您在編譯時訪問超類的可訪問方法

看到

父母對孩子擁有的任何新方法一無所知。

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

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

SuperClass不了解childClassMethod() 您必須為這兩個類提供接口,或者將該方法添加到父級並在子級中覆蓋它。

或者,您可以像其他人建議的那樣簡單地將對象強制轉換為子類,但這可能是不安全的。

((ChildClass) s).childClassMethod()

那是因為超類沒有那種方法。

如果您希望超類能夠調用該方法,則需要將其設計為抽象並為其提供該方法。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM