1

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

private String name, department;

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

private String trade;

现在我所做的是我创建了一个print()方法,它将: A) 在 Employee 类中,打印namedepartment。B)在 Employee 中使用相同的方法,将在 Tradesman 中创建(因此覆盖它),它将打印额外的一个元素,即trade。现在的问题是我创建了另一个名为Staff的类,它将包含一些元素类型的数组Object,我必须实现一个hire()方法、fire()方法和一个put()打印整个数组的方法。直到印刷的那一刻,一切都是凉爽而邪恶的。我正在为如何打印它而苦苦挣扎,因为我print()为每个类都有方法,但它必须取决于类型......如果我将方法转换为Employee我将失去工匠类的贸易元素,例如:

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

这是错误的。因为如果我雇了一个商人,这个方法不会打印交易。如何处理这个问题?提前致谢!加油^^

4

3 回答 3

1

“因为如果我雇了一个商人,这个方法就不会打印交易”

你错了,会的。如果Employee实际上是 a Tradesman,则调用print()将调用Tradesman.print()。如果它被覆盖,则将调用覆盖方法。如果您所有的数组对象都是Employee,只需使用 anEmployee[]而不是,Object[]这样您就不必进行无用的强制转换。

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

Employee[]因为 aTradesman是一个,所以两者都成立Employee。同样在Java中,我建议您使用ListList<Employee>在您的情况下),它比数组更易于管理。

于 2013-11-04T14:51:35.650 回答
1

即使您将 a 强制Tradesman转换Employee为基础对象,它仍然是类型Tradesman并使用覆盖的print方法。

于 2013-11-04T14:51:43.763 回答
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();
 }

}
于 2013-11-04T15:06:59.953 回答