java - 子类对象只能从父类(super class)对象继承某些参数吗?

标签 java inheritance polymorphism super

我有一个抽象类 Employee,它是 CasualEmployee 的父类(super class)。 Employee 有 name、baseSalary 作为参数,而 CasualEmployee 没有 baseSalary。是否可以使用 super 将 CasualEmployee 对象转换为 Employee 对象?

public Employee(String name, double baseSalary){
this.name=name;
this.baseSalary = baseSalary;   
    }

public CasualEmployee(String name, double hourlyRate, int hoursWorked) {
  //insert super();

   this.hourlyRate = hourlyRate;
   this.hoursWorked = hoursWorked;

   }

最佳答案

正如之前的评论所述,您显然存在设计问题。如果您打算采用继承方法,您应该记住子类应该比它们各自的父类(super class)更加“专​​业化”!因此,所有子类都应该继承其父类的特性,必要时添加一些特性或更改其他一些特性。但是,您永远不应该陷入子类不应该具有父类的某些属性/方法的情况。 如果是这种情况,这将打破继承本身所依据的泛化<->特化语义原则。

在您的示例中,解决方案是从 Employee 类中删除 baseSalary,并在继承树中与 CasualEmployee 处于同一级别的位置创建另一个子类(例如 BasedPayEmployee)。

Generalization, Specialization, and Inheritance

关于java - 子类对象只能从父类(super class)对象继承某些参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47046971/

相关文章:

java.sql.SQLException : Driver Error: index parameter to bindParam() must be between 1 and numParameters

java - 为什么当设置不同的 JVM XMX 时,相同代码的 RES 内存会发生变化

java - 使用 Enum 作为功能齐全的对象(像本例一样使用动态调度)是否意味着滥用它或不是一个好的设计?

c# - 有没有 .NET 多态数据框架

java - 如何从另一个android应用程序 Assets 文件中读取html文件?

java - Swing 原生外观与 AWT 风格对比

jpa - Kotlin 继承和 JPA

c# - c# 中继承和接口(interface)的意外行为

c++ - 我可以在派生类中继承私有(private)成员吗?

c++ - 子类的模板实例化是多态的,具有接口(interface)的特化