我有一個類,比如說 - Animal
。還有一些繼承自它的類,比如說:Bird
,Cat
,Dog
。從超類對象列表中獲取子類
現在我創建一個Animal類型的數組列表,併爲其添加一些子類的實例。
private List<Animal> list = new ArrayList<Animal>();
list.add(new Bird());
list.add(new Bird());
list.add(new Cat());
list.add(new Dog());
然後,我通過這個列表循環,調用一些方法等
for(int i = 0; i < list.length; i++)
{
list.get(i).makeSound();
}
精細。但是如果我想在Bird
子類中添加一個方法,那麼將不會在Animal
超類中實現?比方說,fly()
方法,所以它看起來像這樣:
for(int i = 0; i < list.length; i++)
{
list.get(i).makeSound();
if(list.get(i) instanceof Bird)
{
list.get(i).fly(); // error here
}
}
這是有道理的,但它拋出一個錯誤 - 無法找到象徵。在Animal
類中實現該方法似乎解決了這個問題,但是當我必須這樣做幾次時,它會傷害我的眼睛。有沒有辦法解決這個問題?
這是什麼 - 'ArrayList list = new List ;'?我只在這條線上計算兩個編譯時間錯誤... –
是的,抱歉,編輯。 – khernik