2012-10-17 136 views
0

我有一個空的抽象基類不能從含有一個基類

abstract class Base{ 
    Base(){} 
} 

然後,我有幾類擴展這個基類

class A extends Base{ 

} 

然後我intantiate這些一個LST鑄造和對象類並列入清單。

A it = new A(); 
ArrayList<Base> list = new ArrayList<Base>(); 
list.add(it); // add A object 

然後我要像做

for(Base msg : List){ 
     if(msg instanceof A){ 
      A obj = (A)msg; 
     } 

    } 
But I'm getting errors. 

我在做什麼錯

+0

如果你遍歷一個列表,並檢查'instanceof',您使用的列表錯誤。繼承背後的想法是,你可以把'A'對象看作是一個'Base'對象,而不關心它實際上是一個'A'。 – corsiKa

+0

你在做什麼,你會得到什麼具體的錯誤? –

+2

「但是我得到的錯誤」是*從來沒有足夠的信息。什麼錯誤?請提供一個簡短但完整的程序來展示問題。 –

回答

0

不檢查它是A.考慮這個

abstract class Base{ 
    Base(){} 
    void doSomething() { System.out.println("AwesomePossum"); } 
} 

class A extends Base { 
    @Override void doSomething() { System.out.println("Frankie O'Malley"); } 
} 

再後來,當你迭代時,而不是像

for(Base msg : list) { 
    if(msg instanceof A) // BAD 
} 

做到這一點:

for(Base msg : List) { 
    msg.doSomething(); 
} 
0

我通常會想到Base宣佈由A提供的方法,因此你可以拉出一個Base參考,並使用它,不管事實的實施是A

如果列表中的類型不符合通用接口協議,我會質疑爲什麼將它們放在一起列表中。這會讓生活變得非常困難。

0
for(Base msg : List){<---List is used variable name is list 

您沒有使用可變list而不是重複使用的是List。那就是爲什麼你得到錯誤。

應該

for(Base msg : list)