Вы просто написать конструктор, который способен предоставить значения name
и extensionNumber
конструктору суперкласса и делать все, что вам нравится.
Я бы лично сделать Employee
конструктор protected
, а также, учитывая, что он действительно является доступна только для подклассов. Обратите внимание, что, кроме этого, нет никакой разницы между использованием конструкторов в абстрактных классах и в конкретных классах.
public abstract class Employee {
// ...
protected Employee(String name, String extensionNumber) {
// ...
}
}
public class SalariedEmployee extends Employee {
// ... (probably a field for the salary)
public SalariedEmployee(String name, String extensionNumber, BigDecimal salary) {
// Pass information to the superclass constructor to use as normal
super(name, extensionNumber);
// Use salary here
}
}
Обратите внимание, что это не требуется , что у вас есть параметры, соответствующие параметры суперкласса, так долго, как вы можете предоставить их в super
вызова.Например:
public class SalariedEmployee extends Employee {
...
public SalariedEmployee(Employee plainEmployee, BigDecimal salary) {
super(plainEmployee.getName(), plainEmployee.getExtensionNumber());
// Use salary here
}
}
(Вы могли бы также рассмотреть вопрос о внесении extensionNumber
int
вместо String
, как это на самом деле, вероятно, будет простой номер - в то время как полные номера телефонов лучше всего хранятся в виде строк.)
Спасибо. После этого я получил логику после ответов. –