2016-11-03 5 views
0

下のコードでは、私は親クラスと子クラスオブジェクトの両方を作成しました。これらのオブジェクトは、arraylistに格納されます。私の質問は、どのように私はこれらのオブジェクトを区別することができると私は第二レベルの従業員の詳細を取得したい。これらのオブジェクト(FirstLevelEmployeeとSecondLevelEmployeeなど)を区別するにはどうすればよいですか?secondLevelEmployeeの詳細を印刷しますか?

package com.javahonk.controller; 

import java.util.ArrayList; 
import java.util.ListIterator; 

class FirstLevelEmployee { 
    int id; 
    String name; 
    double salary; 

    FirstLevelEmployee(int id, String name, double salary) { 
     super(); 
     this.id = id; 
     this.name = name; 
     this.salary = salary; 
    } 
} 

class SecondLevelEmployee extends FirstLevelEmployee { 
    int experience; 

    SecondLevelEmployee(int id, String name, double salary, int experience) { 
     super(id, name, salary); 
     this.experience = experience; 
    } 
} 

public class EmployeeDemo { 

    public static void main(String[] args) { 
     ArrayList<FirstLevelEmployee> emps = new ArrayList<>(); 
     emps.add(new FirstLevelEmployee(1, "aaa", 20000.00)); 
     emps.add(new FirstLevelEmployee(2, "bbb", 10000.00)); 
     emps.add(new FirstLevelEmployee(3, "bbb", 30000.00)); 
     emps.add(new SecondLevelEmployee(4, "zzz", 12000, 2)); 
     emps.add(new SecondLevelEmployee(6, "yyy", 45000.00, 5)); 
    } 
} 
+1

は、すなわち '場合(EMP instanceofはSecondLevelEmployee){SecondLevelEmployee SL =(SecondLevelEmployee)EMPを' instanceof'とキャストを使用してください。 System.out.println(sl.experience); } ' – BretC

+0

なぜ私は答えとして投稿しないでください、@ BretC? –

+0

これは悪い解決策だと思います。鋳造とは多型を意味しません。 – duffymo

答えて

1

は次のように行うようにしてください:

for(FirstLevelEmployee emp : emps){ 
    if(emp instanceof SecondLevelEmployee){ 
      System.out.println(((SecondLevelEmployee)emp).experience); 
    } 
} 

あなたは、配列を反復処理し、与えられた要素empSecondLevelEmployeeのinstaceであれば聞いてきます。その場合は、empSecondLevelEmployeeに置き換えて印刷します。

1

このデザインは最適ではありません。

よりよい解決策には、経験属性を持つEmployeeクラスがあります。あなたはその方法でコレクションをフィルタリングできます。

従業員は、タイプやコードを変更することなく、十分な経験を蓄積した後、時間の経過とともに移行する可能性があります。

このデザインを再考することをおすすめします。

0

は、Java 8知っている場合は、このオプションがあります:

public static void main(String[] args) { 
      ArrayList<FirstLevelEmployee> emps=new ArrayList<>(); 
      emps.add(new FirstLevelEmployee(1, "aaa", 20000.00)); 
      emps.add(new FirstLevelEmployee(2, "bbb", 10000.00)); 
      emps.add(new FirstLevelEmployee(3, "bbb", 30000.00)); 
      emps.add(new SecondLevelEmployee(4, "zzz", 12000, 2)); 
      emps.add(new SecondLevelEmployee(6, "yyy", 45000.00, 5)); 

      emps.removeIf(e -> e instanceof SecondLevelEmployee); 

      System.out.println(emps); 

     } 
関連する問題