Сотрудник классаИспользование полиморфизма?
public class Employee {
protected String name;
protected String jobsheetnumber;
public Employee(String n,String j){
this.name = n;
this.jobsheetnumber = j;
}
public Employee(String name)
{
this.name = name;
}
public String getName() {
return name;
}
public String getJobsheetnumber() {
return jobsheetnumber;
}
public void setName(String name) {
this.name = name;
}
public void setJobsheetnumber(String jobsheetnumber) {
this.jobsheetnumber = jobsheetnumber;
}
}
Механика Класс
public class Mechanic extends Employee{
public Mechanic(String name,String jobsheetnumber){
super(name,jobsheetnumber);
}
}
Супервизор Класс
public class Supervisor extends Employee{
public Supervisor(String name){
super(name);
}
}
Компания Класс [фрагмент]
public class Company {
private String companyname;
private String companyaddress;
private String postalcode;
private String city;
private String country;
private String telephonenumber;
private String faxnumber;
private String province;
private Employee supervisor;
private Employee mechanic;
public Company(String companyname,String companyaddress,String postalcode,String city,String country,String telephonenumber,String faxnumber,String province,String supervisorname,String jobsheetnumber,String mechanicname)
{
this.companyname = companyname;
this.companyaddress=companyaddress;
this.postalcode = postalcode;
this.city=city;
this.country=country;
this.telephonenumber=telephonenumber;
this.faxnumber=faxnumber;
this.province=province;
supervisor = new Supervisor(supervisorname);
mechanic = new Mechanic(mechanicname,jobsheetnumber);
}
Сотрудник Cla ss - суперкласс класса Mechanic и Supervisor .. прямо сейчас я использую атрибуты Employee, т. е. имя и номер рабочего места в подклассах. Класс механики и супервизора
код работает нормально .. но что делать, если я хочу добавить расширенный функциональность в механике и супервизоре? то я не могу получить доступ к этим переменным, потому что ссылка на объект типа Employee.
Это правильное использование полиморфизма? что мы должны использовать super() в качестве конструктора каждый раз, когда мы создаем ссылку Супервизора/Механического объекта? мы не можем использовать расширенную функциональность внутри класса Supervisor и Mechanic?
Вы можете привести ссылку, например: Supervisor superRef = (Supervisor) company.supervisor; затем получить доступ к специализированным свойствам на superRef – axlj
Это не полиморфизм, это просто наследование. Полиморфизм будет иметь абстрактный метод у сотрудника и реализовать его по-разному для Механика и Супервизора. То, что вы не можете получить доступ к свойствам Supervisor и Mechanic через экземпляр вашей компании, - это только потому, что вы объявили своих членов как Employee. Вы должны объявить их соответственно Супервизором и Механиком. –