java - 多层次的继承混乱
问题描述
我正在做这个项目,我需要为分层系统提供多层次的继承。层次结构是这样的,员工(抽象)-> 技术员工(抽象)-> 软件工程师和技术主管。
我正在尝试做的事情是在其中一个类中创建一种“经理变量”,以充分建立技术主管和软件工程师之间的“is-a”关系。本质上,我需要创建一个新的 TechnicalLead,即经理。TechnicalLead 的基本工资应该是 TechnicalEmployee 的 1.3 倍。TechnicalLeads 的默认人数应为 4。
我无法理解这个想法,有人可以向我解释一下它是如何完成的吗?我知道继承是如何工作的,但是当涉及到仔细跟踪这些时,我真的觉得我很糟糕。从技术上讲,我不知道在哪里写什么。
员工
abstract class Employee {
private String name;
protected double baseSalary;
Employee(String name, int baseSalary){
this.name = name;
this.baseSalary = baseSalary;
}
public String getName() {
return name;
}
public double getBaseSalary() {
return baseSalary;
}
}
技术人员
abstract class TechnicalEmployee extends Employee{
private int checkIns;
TechnicalEmployee(String name){
super(name, 75000);
}
}
技术主管
class TechnicalLead extends TechnicalEmployee{
private int headCount;
TechnicalLead(String name) {
super(name);
baseSalary = getBaseSalary()*1.3;
this.headCount = 4;
}
}
另一个快速的问题,在这部分代码中;baseSalary = getBaseSalary()*1.3;
我是否需要将 baseSalary 定义为受保护?为了访问私有字段。
解决方案
好吧,有时我想通了。这是问题的解决方案。
我在 Employee 类中添加了一个 manager 变量,其中包含相应的 setter 和 getter 以供以后使用;
abstract class Employee {
private String name;
protected double baseSalary;
protected Employee manager; // This is what I've added.
Employee(String name, int baseSalary){
this.name = name;
this.baseSalary = baseSalary;
}
public String getName() {
return name;
}
public double getBaseSalary() {
return baseSalary;
}
public String getManager() {
return manager.getName();
}
public void setManager(Employee manager) {
this.manager = manager;
}
}
然后我向 Technical Employee 添加了一个 Technical Lead 对象,以便我们可以将经理设置为非抽象类,例如软件工程师。
abstract class TechnicalEmployee extends Employee{
private int checkIns;
private TechnicalLead technicalLead; // This is the manager of the technical employee..
TechnicalEmployee(String name){
super(name, 75000);
this.manager = technicalLead;
}
}
出于演示目的,我创建了一个 main 并按以下方式对其进行测试;
public class CompanyManagement {
public static void main(String[] args) {
SoftwareEngineer s1 = new SoftwareEngineer("Patates");
TechnicalLead t1 = new TechnicalLead("Patlıcan");
s1.setManager(t1);
System.out.println(s1.getManager());
}
}
结果是;帕特利坎。所以它似乎正在工作。谢谢大家。
推荐阅读
- javascript - 如何正确使用 put 方法 ANGULAR
- javascript - 为什么这个值在循环结束时返回 true,然后在循环开始时返回 false?
- clojure - 在列表的第 N 个位置插入一个新元素
- performance - WebGL 中的 AR 应用程序性能很差
- react-native - React Native 并支持 Android Auto、Apple CarPlay 和可穿戴设备
- aws-amplify - 我通过控制台创建了一个 Amplify 应用程序,但无法拉取它
- python - 如何将csv文件转换为python字典?
- matplotlib - Matplotlib:是否可以进行逐步堆积图?
- c++ - 虚幻引擎 bUseControllerRotation 问题
- google-bigquery - BigQuery GIS 返回不正确的值