我有一個父類Parent
,和三個類延伸它:ChildOne
,ChildTwo
和ChildThree
,其每一個從Parent
類重寫的方法。我創建了一個Parent
對象數組,然後動態地(從用戶輸入)創建其中一個子類的對象。在此之後,我需要遍歷Parent[]
數組,並且想要將每個元素排版到它的「真實」類(其中一個子類)中,以便使用適當的重寫方法。
我試圖爲子類的類型創建變量,就像這樣:動態typcasting作爲子類
for (int i = 0; i < parents.length; i++) {
try {
Parent par = new Parent();
par = parents[i];
switch (par.getType()) {
case "one":
ChildOne child1 = (ChildOne)par;
System.out.println(child1.overridenMethod());
break;
case "two":
ChildTwo child2 = (ChildTwo)par;
System.out.println(child2.overridenMethod());
break;
case "three":
ChildThree child3 = (ChildThree)par;
System.out.println(child3.overridenMethod());
break;
}
} catch (NullPointerException npe) {
System.out.println("No child at position: " + i);
}
}
,但我得到一個錯誤說ChildThree
不能被強制轉換爲ChildTwo
。看起來,在第一個元素(它是成功的類型轉換)之後,par
對象將保留其被類型轉換的任何子類的子類對象。
我該如何解決這個問題,並能夠根據數組中每個對象的類來進行類型轉換?
非常感謝!
爲什麼使用類型轉換?爲什麼多態不可行? – kraskevich 2015-02-24 16:59:57