它似乎工作,但它是一個'好'的編程?將類型轉換爲超類並調用override方法可接受? (Java)
下面是一個例子來闡明:
public class foo{
foomethod(){do something};
}
public class foo1 extends foo{
@override foomethod(){do something};
}
public class foo2 extends foo{
@override foomethod(){do something};
}
ArrayList x /*with foo1 and foo2 objects*/
for (Object o : x){((foo)o).foomethod();}
是這個concidered「好」節目,如果沒有什麼是一個不錯的緊湊的替代? (除了開關(o.getClass()),如果可能的話)
編輯,因爲我真的很糟糕的澄清似乎:)
我的意思是調用已重寫方法,而不是超方法。 什麼我想要做的是另一種方法:
ArrayList中的x/*再次foo1和foo2的對象*/
for (Object o : x){
switch(o.getClass()){
case foo1.class:
((foo1)o).foomethod();
break;
case foo2.class:
((foo1)o).foomethod();
break;
}
}
,但我想避免switch語句,因爲它使代碼更更大更復雜。
好吧,如果你的軟件設計的很好,你應該永遠不需要那樣做。覆蓋該方法的重點是因爲如果一個對象是超類的子類,它應該具有不同的功能。 – Joel
*「我的意思是調用已被覆蓋的方法,而不是超級方法。」* - 這沒有意義。超類中的方法是重寫的方法! –
我知道,有些事情很難用第一種語言進行溝通,對不起,我的意思是調用重寫超級方法的方法,這樣做會讓人感覺如何? – r0t0r