【问题标题】:Is there a way to inherit from two classes有没有办法从两个类继承
【发布时间】:2015-10-26 00:09:12
【问题描述】:

我的任务:

编写一个名为SeniorWorker的类,它继承自Employee类,除了namesalaryovertimePay之外,它添加了一个名为double的类型数据meritPay,其计算公式为工资的10%。它覆盖earning()toString 方法来计算SeniorWorker 的总工资并分别返回SeniorWorker 的正确数据。

澄清:作业让我们使用书中的一些示例代码(Employee、RegularWorker、Manager、SeniorManager.java)。我的问题是SeniorWorker 类从Employee 类继承所有这些变量,但是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();
   }
}

我的班级: 到目前为止,我只是求助于从普通工人类继承(并且它有效),但是任务说我应该从雇员类继承。

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();
}

}

【问题讨论】:

  • 你可能想看看Interfaces and Inheritance
  • @HovercraftFullOfEels 是的,我不能使用接口,因为这些会在我们本书的后面章节中出现。本章只处理多态性和继承。
  • 你可以让SeniorWorker继承自RegularWorker,并争辩说RegularWorker继承自Employee,SeniorWorker也继承Employee。或者您可以直接从 Employee 继承并将所需的其余代码添加到 SeniorWorker。
  • 这不是指定问题的重复项
  • @BrianS -- 我已经编辑了你的问题,这将把它放在重新打开队列中。希望阅读它的版主同意这不是重复的并重新打开它。同时,希望我的回答对您有所帮助。

标签: java inheritance polymorphism


【解决方案1】:

不,在java中你只能从一个类继承。但是,该类可以从另一个类继承,依此类推。您可以扩展多个接口,这些接口在 java 8 中可以包含默认方法实现(可以是默认 getter,为封装的属性返回预定值)。

然而,继承应该只真正用于代码共享,而接口应该只真正用于多态。

话虽如此,在您的示例中,您的 RegularWorker 是 Employee,因此您的 SeniorWorker 是 RegularWorker 并且是 Employee。因此,根据您的分配请求,您的 SeniorWorker 继承(扩展自)Employee。

但是,如果你想一想,一个高级工人怎么可能也是一个正式工人呢?他们不是普通的,他们是高级的。他们可能在职业生涯的某个阶段一直很规律,但现在他们已经是资深了,而且根本不规律,尽管与普通员工有一些共同点。如果你将这些东西从普通员工推到员工身上,并且有员工的两个后代,普通员工和高级员工,那么你就会解决这个问题,并且可能会因为聪明而获得加分。

【讨论】:

  • Java-8 接口不能包含属性。
  • 谢谢,我正试图快速通过答案,所以我的意思很简单。我现在已经修好了。
猜你喜欢
  • 2011-01-14
  • 2011-02-16
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
  • 1970-01-01
相关资源
最近更新 更多