Java 有没有从两个类继承的方法
我的任务: 对一个名为Java 有没有从两个类继承的方法,java,inheritance,polymorphism,Java,Inheritance,Polymorphism,我的任务: 对一个名为SeniorWorker的类进行编码,该类继承自Employee类,除了name、salary和overtimePay之外,它还添加了一个名为meritPay的类型数据,该数据按工资的10%计算。它覆盖earning()和toString方法,分别计算SeniorWorker的总工资,并返回SeniorWorker的正确数据 澄清:作业让我们使用书中的一些示例代码(Employee、RegularWorker、Manager、SeniorManager.java)。我的问题
SeniorWorker
的类进行编码,该类继承自Employee
类,除了name
、salary
和overtimePay
之外,它还添加了一个名为meritPay
的类型数据,该数据按工资的10%计算。它覆盖earning()
和toString
方法,分别计算SeniorWorker
的总工资,并返回SeniorWorker
的正确数据
澄清:作业让我们使用书中的一些示例代码(Employee、RegularWorker、Manager、SeniorManager.java)。我的问题是SeniorWorker
类继承了Employee
类的所有变量,但是Employee
类只包含name变量,而meritPay
之外的其余变量都在RegularWorker
类中,这就是为什么我想知道是否可以继承的原因员工
班级和普通员工
或者我需要做其他事情吗
代码:
我的班级:
到目前为止,我只是求助于从regularworker类继承(它是有效的),但是任务说我应该从employee类继承
public class SeniorWorker extends RegularWorker {
public double meritPay;
public SeniorWorker(String name, double salary,double overtimePay, double meritPay)
{
super(name,salary,overtimePay);
this.meritPay = meritPay;
}
public double getMeritPay() {
return meritPay;
}
public void calculateMeritPay(){
meritPay = 0.10 * salary;
}
public double earnings() { return salary + overtimePay + meritPay; } //override the method to return salary
public String toString() { //override the method to print the name
return "Senior Worker: " + getName();
}
}
不,在java中,只能从一个类继承。但是,该类可以从另一个类继承,依此类推。您可以扩展多个接口,在Java8中,这些接口可以包含默认方法实现(可以是为封装属性返回预定值的默认getter)
然而,继承应该只用于代码共享,接口应该只用于多态性
话虽如此,在您的示例中,您的正式员工是一名员工,因此您的资深员工是一名正式员工,也是一名员工。因此,您的SeniorWorker将根据您的工作分配请求继承(扩展自)Employee
但是,如果你想一想,一个资深员工怎么可能也是一个普通员工呢?他们不是普通人,他们是老年人。他们可能在职业生涯中的某个阶段是固定的,但现在他们是资深的,一点也不固定,尽管他们与固定员工有一些共同之处。如果你把这些东西从普通员工推到普通员工,并且有两个员工的后代,普通员工和高级员工,那么你就已经解决了这个问题,并且可能因为聪明而获得额外的分数。你可能想看看@HovercraftFullOfEels是的,我不能使用接口,因为这些接口将在本书后面的章节中介绍。本章仅讨论多态性和继承。您可以让SeniorWorker从RegularWorker继承,并认为RegularWorker从Employee继承时,SeniorWorker也继承Employee。或者,您可以直接从Employee继承并将所需的其余代码添加到SeniorWorker。这不是指定代码的副本question@BrianS--我已编辑了您的问题,将其放入重新打开的队列中。希望阅读它的版主会同意这不是一个副本,并重新打开它。同时,我希望我的答案能帮上一点忙。Java-8接口不能包含属性。谢谢,我试图快速理解答案,所以简化了我的意思。我现在已经修好了。
public class SeniorWorker extends RegularWorker {
public double meritPay;
public SeniorWorker(String name, double salary,double overtimePay, double meritPay)
{
super(name,salary,overtimePay);
this.meritPay = meritPay;
}
public double getMeritPay() {
return meritPay;
}
public void calculateMeritPay(){
meritPay = 0.10 * salary;
}
public double earnings() { return salary + overtimePay + meritPay; } //override the method to return salary
public String toString() { //override the method to print the name
return "Senior Worker: " + getName();
}
}