我的代码存在此问题。 我创建了一个具有两个实例变量的类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()
哪个错了。因为如果我雇用一个商人,这种方法将不会打印交易。如何处理这个问题?提前致谢!干杯^^
答案 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();
}
}