我的代码有这个问题。我创建了一个具有两个实例变量的类 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[]
将同时持有两者,因为Tradesman
是Employee
.同样在Java中,我建议您使用List
(在您的情况下List<Employee>
),它比数组更易于管理。
强制转换了Tradesman
以Employee
基础对象仍将是 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();
}
}