Я хочу запрограммировать фабрику, которая создает два типа людей: «Сотрудник» и «Предприниматель». Оба они используют одни и те же базовые c атрибуты «Person», но они также реализуют свои уникальные атрибуты.
Проблема в том, что если я хочу вернуть метод или атрибут, который не объявлен в абстрактном классе «Person», программа не находит его (поскольку, очевидно, я создаю объект типа «Человек», а не конкретно «Сотрудник» или «Предприниматель»).
Как мне решить эту проблему?
Это демонстрационный класс
public class Demo{
public static void main(String[] args){
PersonFactory pf = new PersonFactory();
Person p1 = pf.getPerson("Employee");
p1.presentation();
System.out.println(p1.getComplanyName());
}
}
Это абстрактный класс
public abstract class Person{
String name;
String surname;
abstract void presentation();
}
Это два конкретных класса, которые расширяют Person
public class Entre extends Person{
int licenseNumber;
@Override
public void presentation(){
System.out.println("hi i'm an Entrepreneur");
}
public int licenseNumber(){
return licenseNumber;
}
}
public class Empl extends Person{
String companyName;
@Override
public void presentation(){
System.out.println("hi i'm an employee");
}
public String getCompanyName(){
return companyName;
}
}
Наконец завод
public class PersonFactory{
public Person getPerson(String type){
if(type.equalsIgnoreCase("ENTREPRENEUR")){
return new Entre();
}
else if(type.equalsIgnoreCase("Employee")){
return new Empl();
}
return null;
}
}