讓我們設置一個假設的方案。我父類如何正確使用繼承並避免向下滾動
public class A {
protected void doSomething(){
//do something the A way
}
}
而子類
public class B extends A{
@Override
protected void doSomething(){
// do something the B way
}
}
,我有一些假設類:
public class SomeClass implements someInterface{
@Override
public void someMethod(A aObject){
aObject.doSomething();
}
}
但我想用B的行爲,我不能改變方法參數也不行,我也可以下調到B.
很明顯,我處理了一個更大的問題,但這是t他同樣的原則,我自己的答案是將A的屬性克隆到B中,然後使用B.但在此之前,我想聽到更多的意見。
編輯:約束,我不能將B的實例傳遞給方法,也不使用instanceof方法。
編輯2:因爲SomeClass的覆蓋從接口這個方法必須始終使用A.
的實例編輯3我從來沒有收到B的一個實例:這是由設計不當遺留代碼,我跑生成的情況進入,我只是想找出更快,但乾淨的方式來解決作爲excercise。
如果參數'A'是一個''instanceofB'','B'的'doSomething()'方法將被使用,因爲它是'Overriding'''的'doSomething()'方法。沒有必要將'A'轉換爲'B'來實現這個功能。 – CoderMusgrove
[調用Java中的子類的方法]可能的重複(http://stackoverflow.com/questions/2701182/call-a-method-of-subclass-in-java) –
「我永遠不會收到B的實例,因爲someClass從必須始終使用A的實例的接口覆蓋此方法。「你怎麼能確定你永遠不會收到一個B的實例(因爲B是-A)?我信任的唯一約束是'someInterface'中描述的約束。 – Spotted