2011-12-20 10 views
1

私はちょうどArrayListsの私の知識に取り組んでおり、質問があります。ArrayListsのメソッド

私は4つのクラス、人スーパークラス、従業員サブクラス、瞳孔サブクラス、従業員のマネージャサブクラスを持っています。

ArrayListの方に私がm.setBonusというメソッドを使用する方法がわかりません。オブジェクトを別々の配列に分割することができますが、それが答えかどうかはわかりません。

現時点ではManager m : managerの部分にエラーが表示されています。

私は現在、これは本当に簡単なものであれば、私は申し訳ありませんが、私のテストクラスに

public static void main(String[] args){ 

ArrayList<Person> people = new ArrayList<Person>(); 

people.add(new Employee("Tom", 4000, 1990, 3, 10)); 
people.add(new Pupil("Dick", "Comp Sci")); 
people.add(new Employee("Harry", 4000, 1990, 3, 10)); 
people.add(new Manager ("Dan", 5000, 1990, 10, 1)); 

for (Manager m : manager) 
{ 
    m.setBonus(5000); 
} 

for (Person p : people){ 

    System.out.println(p.getDetails()); 
} 

} 

} 

をこのコードを持っています。私はネット上で何も見つけることができません。あなたが経営者のリストを宣言することはありません

乾杯

答えて

2

managerListは存在しません。代わりに、既存のPersonループでチェックを行います。

public static void main(String[] args) { 
    ArrayList<Person> people = new ArrayList<Person>(); 

    people.add(new Employee("Tom", 4000, 1990, 3, 10)); 
    people.add(new Pupil("Dick", "Comp Sci")); 
    people.add(new Employee("Harry", 4000, 1990, 3, 10)); 
    people.add(new Manager ("Dan", 5000, 1990, 10, 1)); 

    // manager arrayList does not exist 
    //for (Manager m : manager) 
    //{ 
    // m.setBonus(5000); 
    //} 


    for (Person p : people){ 
     //Do this instead 
     if (p instanceof Manager) { 
      ((Manager) p).setBonus(5000); 
     } 

     System.out.println(p.getDetails()); 
    } 
} 
4

ので、それは何それを行うにはないアイデアを持っていないmanagerと呼ばれます。

あなたはこのような何かをする必要があります

for (Person p : people) 
{ 
    if (p instanceof Manager) { 
     ((Manager)p).setBonus(5000); 
    } 
} 

これは、それがサブクラスマネージャであるかどうかを確認するためのpのクラスを確認します。

+0

非常にありがとう、私は本のセクションのセクションを読んで行く! :) – EmberZ

+3

'Manager'インスタンスにその参照をキャストする必要があるかもしれません - ' Pupil'sがボーナスを得ているのではないかと疑います。 –

+1

これは解決策であり、元のポスターが問題を起こした唯一の解決策かもしれませんが、instanceofを大量に使用すると、全体的なデザインが壊れてしまい、より良い方法があるかもしれないと心配しています根本的な問題を解決する –

関連する問題