首页 > 解决方案 > 多层次的继承混乱

问题描述

我正在做这个项目,我需要为分层系统提供多层次的继承。层次结构是这样的,员工(抽象)-> 技术员工(抽象)-> 软件工程师和技术主管。

我正在尝试做的事情是在其中一个类中创建一种“经理变量”,以充分建立技术主管和软件工程师之间的“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 定义为受保护?为了访问私有字段。

标签: javainheritance

解决方案


好吧,有时我想通了。这是问题的解决方案。

我在 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());

    }
}

结果是;帕特利坎。所以它似乎正在工作。谢谢大家。


推荐阅读