我如何区分这些对象(即FirstLevelEmployee和SecondLevelEmployee),我想打印secondLevelEmployee的详细信息?

时间:2016-11-03 16:42:52

标签: java inheritance arraylist

在下面的代码中,我创建了父类和子类对象。这些对象存储在arraylist中。我的问题是如何区分这些对象,我只想检索二级员工的详细信息。

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));
    }
}

3 个答案:

答案 0 :(得分:1)

尝试这样做:

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

您将迭代数组,并询问给定元素emp是否为SecondLevelEmployee的实例。如果是真的,您可以通过将emp转换为SecondLevelEmployee

来打印它

答案 1 :(得分:1)

这种设计不够理想。

更好的解决方案是拥有具有体验属性的Employee类。您可以通过这种方式过滤集合。

员工可以在积累足够的经验后随着时间的推移而转换,而无需更改类型或代码。

我建议重新考虑这个设计。

答案 2 :(得分: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);

       }