![](/img/trans.png)
[英]How can parent class method return child class type? Doesn't this violate inheritance?
[英]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();
或使s
為ChildClass
類型。
父母對孩子擁有的任何新方法一無所知。
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.