Многоуровневая путаница наследования - PullRequest
0 голосов
/ 25 марта 2020

Я работаю над этим проектом, где мне нужно иметь несколько уровней наследования для иерархической системы c. Иерархия работает следующим образом: Сотрудник (Аннотация) -> Технический сотрудник (Аннотация) -> Инженер-программист и Технический руководитель.

То, что я пытаюсь сделать, - это создать своего рода «переменную менеджера» в одном из этих классов, чтобы в достаточной степени установить sh отношения «есть» между техническим руководителем и инженером-программистом. По сути, мне нужно создать новый TechnicalLead, который является менеджером. Базовый оклад TechnicalLead должен быть в 1,3 раза больше, чем у TechnicalEmployee. По умолчанию у 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 как защищенный? для доступа к приватному полю.

1 Ответ

0 голосов
/ 25 марта 2020

Хорошо, после того, как иногда я понял это. Вот решение проблемы.

Я добавил переменную менеджера в класс Employee с соответствующими им установщиком и получателем для дальнейшего использования;

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, чтобы мы могли установить менеджер в неабстрактных классах, таких как Software Engineer.

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

    }
}

И результат был; Patlıcan. Похоже, это работает. Спасибо всем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...