有没有办法从两个类

时间:2015-10-26 00:09:12

标签: java inheritance polymorphism

我的任务:

编写一个名为SeniorWorker的类,它继承自Employee类,除了namesalaryovertimePay之外,还添加了{{1}键入名为double的数据,计算为工资的10%。它会覆盖meritPayearning()方法来计算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();
   }
}

1 个答案:

答案 0 :(得分:1)

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

但是,继承应该只用于代码共享,并且接口应该只用于多态。

话虽如此,在您的示例中,您的RegularWorker是一名员工,因此您的SeniorWorker是一名RegularWorker并且是一名员工。因此,您的SeniorWorker将继承(扩展自)Employee,作为您的分配请求。

但是,如果你考虑一下,高级工人怎么也能成为一名普通工人呢?他们不定期,他们是高级。他们可能在他们的职业生涯中一直处于常规状态,但现在他们已经高级,而且根本没有经常性,尽管他们与普通员工有一些共同之处。如果你将这些东西从resumeremployee推送到员工,并且有两个员工,普通员工和老年人的后代,那么你已经把这个烂摊子排除在外,可能会因为聪明而获得额外的分数。