我的任务:
编写一个名为SeniorWorker
的类,它继承自Employee
类,除了name
,salary
和overtimePay
之外,还添加了{{1}键入名为double
的数据,计算为工资的10%。它会覆盖meritPay
和earning()
方法来计算toString
的总薪水,并分别返回SeniorWorker
的正确数据。
澄清:该任务允许我们使用本书中的一些示例代码(Employee,RegularWorker,Manager,SeniorManager.java)。我的问题是SeniorWorker
类继承了SeniorWorker
类所有这些变量,但Employee
类只包含name变量,除了Employee
之外的其他变量都是在meritPay
课程中,为什么我想知道我是否可以继承RegularWorker
班级和Employee
,或者我是否需要做其他事情?
代码:
RegularWorker
我的班级: 到目前为止,我只是从正规工作者类继承(并且它起作用),但是作业说我应该从员工类继承。
public class Employee {
private String name;
// Constructor
public Employee(String name ) {
this.name = name;
}
public String getName()
{ return name; }
public double earnings(){return 0.0;}
}
public class RegularWorker extends Employee {
protected double salary, overtimePay;
public RegularWorker( String name, double salary, double overtimePay) {
super( name ); // call superclass constructor
this.salary = salary;
this.overtimePay = overtimePay;
}
public double earnings() { return salary + overtimePay; } //override the method to return salary
public String toString() { //override the method to print the name
return "Regular worker: " + getName();
}
}
答案 0 :(得分:1)
不,在java中你只能从一个类继承。但是,该类可以从另一个继承,依此类推。您可以扩展多个接口,这些接口在java 8中可以包含默认方法实现(可以是为封装属性返回预定值的默认getter)。
但是,继承应该只用于代码共享,并且接口应该只用于多态。
话虽如此,在您的示例中,您的RegularWorker是一名员工,因此您的SeniorWorker是一名RegularWorker并且是一名员工。因此,您的SeniorWorker将继承(扩展自)Employee,作为您的分配请求。
但是,如果你考虑一下,高级工人怎么也能成为一名普通工人呢?他们不定期,他们是高级。他们可能在他们的职业生涯中一直处于常规状态,但现在他们已经高级,而且根本没有经常性,尽管他们与普通员工有一些共同之处。如果你将这些东西从resumeremployee推送到员工,并且有两个员工,普通员工和老年人的后代,那么你已经把这个烂摊子排除在外,可能会因为聪明而获得额外的分数。