打印包含继承成员的数组



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

private String name, department;

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

private String trade;

现在我所做的是我创建了一个print()方法,该方法将:A)在员工类中,打印名称和部门。B)在员工中使用的相同方法,将在Tradesman中创建(从而覆盖它),这将打印额外的一个元素,即交易。现在的事情是我创建了另一个名为 Staff 的类,它将包含一些元素的 Object 类型的数组,并且我必须实现一个hire()方法、fire() 方法和一个将打印整个数组的put()方法。直到打印的那一刻,一切都很酷和邪恶。我正在努力解决如何打印它,因为我每个类都有print()方法,但它必须取决于类型......如果我将该方法转换为员工,我将失去商人类的交易元素,例如:

void put(){
    for (Object a:objArray){
        ((Employee)a).print();
    }
}

这是错误的。因为如果我雇用商人,此方法不会打印交易。如何处理这个问题?提前感谢!干杯^^

"因为如果我雇用商人,这种方法不会打印交易"

你错了,它会的。如果Employee实际上是一个Tradesman,调用print()将调用Tradesman.print()。如果它被重写,则将调用重写方法。如果你所有的数组对象都是Employee的,只需使用Employee[]而不是Object[],这样你就不必做那些无用的强制转换。

"我想实施一系列商人和员工......一个将包含两者的数组,商人和员工的组合。

Employee[]将同时持有两者,因为TradesmanEmployee.同样在Java中,我建议您使用List(在您的情况下List<Employee>),它比数组更易于管理。

即使您

强制转换了TradesmanEmployee基础对象仍将是 Tradesman 类型并使用重写的 print 方法。

试试这个

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

最新更新