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类,除了namesalaryovertimePay之外,它还添加了一个名为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();
}

}