打印包含继承成员的数组?

时间:2013-11-04 14:47:32

标签: java arrays inheritance

我的代码存在此问题。 我创建了一个具有两个实例变量的类Employee:

private String name, department;

然后我创建另一个名为Tradesman的类,它是Employee的扩展,但有一个额外的实例变量:

private String trade;

现在我做的是创建了一个print()方法,它将:A)在Employee类中打印 name department 。 B)在Employee中使用的相同方法将在Tradesman中创建(从而覆盖它),它将打印额外的一个元素,即 trade 。现在的问题是我创建了另一个名为 Staff 的类,它将包含一些元素类型Object的数组,我必须实现hire()方法{{1方法和一个fire()方法将打印整个数组。一切都很酷,邪恶直到打印的那一刻。我正在努力打印它,因为我对每个类都有put()方法,但它必须依赖于类型......如果我将方法转换为 Employee 我将失去Tradesman Class的 trade 元素,例如:

print()

哪个错了。因为如果我雇用一个商人,这种方法将不会打印交易。如何处理这个问题?提前致谢!干杯^^

3 个答案:

答案 0 :(得分:1)

  

“如果我雇用一名商人,这种方法将不会打印交易”

你错了,它会的。如果Employee实际上是Tradesman,则调用print()会调用Tradesman.print()。如果它被覆盖,那么将调用覆盖方法。如果您的所有数组对象都是Employee,那么只需使用Employee[]代替Object[],这样您就不必进行无用的投射。

  

“我想实现一个Tradesman和Employee的数组......一个包含Tradesman和Employee两者的数组。”

由于Employee[]Tradesman,因此

Employee将保留两者。同样在Java中,我建议您使用List(在您的情况下为List<Employee>),它比数组更易于管理。

答案 1 :(得分:1)

即使您将Tradesman转换为Employee,基础对象仍然属于Tradesman类型,并使用重写的print方法。

答案 2 :(得分:0)

试试这个

import java.util.ArrayList;

class Employee {
  String name,department;

  public Employee(String name, String department) {
   this.name = name;
   this.department = department;
  }

  public void print() {
   System.out.println("Name: " + this.name);
   System.out.println("Department: " + this.department);
  }
}

class Tradesman extends Employee {

  String trade;

  public Tradesman(String name, String department, String trade) {
   super(name,department);
   this.trade = trade;
  }

 public void print() {
   super.print();
   System.out.println("Trade: " + this.trade);

 }
}

class Staff {

  ArrayList<Employee> empArray = new ArrayList<Employee>();

  public void put() {
    for(Employee emp : empArray) {
     emp.print();
    }
  }

  public static void main(String[] arg) {

    Staff s = new Staff();
    s.empArray.add(new Employee("John","Sales"));
    s.empArray.add(new Tradesman("Jacob","Sales","Computers"));

    s.put();
 }

}