2014-12-14 4 views
0

Мне любопытно узнать о реализации следующего сценария реальной жизни в JAVA. Скажем,Концепция наследования в Java с двумя подклассами

  1. Существует класс EMPLOYEE, класс ENGINEER и класс MANAGER.
  2. Класс EMPLOYEE - класс суперкласса или родительский класс класса ENGINEER и MANAGER.

Теперь, в прекрасный день, ИНЖЕНЕР получил повышение и стал МЕНЕДЖЕР. , поэтому мы должны удалить объект ENGINEER и создать новый объект MANAGER для этого продвинутого ENGINEER? Или что может быть лучшим способом реализовать его в java?

+1

Не имеет смысла, что 'Engineer' или' Manager' являются * супер * классом 'Employee'. И для вашего вопроса вы можете легко построить новый «Менеджер» из уже существующего «Engineer»;) – Maroun

+5

Это решение. Другим было бы использование делегирования вместо наследования. Каждый сотрудник будет иметь роль, а Role будет иметь два подкласса: «Инженер и менеджер». Когда Инженер, проектируя и создавая полезные вещи, понижается до Менеджера и проходит все свои дни на листах Excel и бессмысленных встречах, он получит новую роль :-) –

+0

На практике «объекты» относительно недолговечны (обычно короче, чем срок службы программы), поэтому «сотрудник» будет создан как * менеджер * или инженер - «продвижение» не будет проблемой. – FoggyDay

ответ

0

Думаю, вы ответили на свой вопрос. Поскольку ни один из двух классов не является таким же, вам нужно удалить один объект и сделать другой, если вы меняете объект из одной формы в другую («Инженер-менеджер»). Рассмотрим приведенный ниже пример для получения информации. Позвольте сотруднику быть интерфейсом. Классы инженера и менеджера реализуют Employee.

interface Employee 
{ 
    void attendsMeeting(); 
    void reportsWorkDone(); 
    void inputsHoursWorked(); 
} 

class Manager implements Employee 
{ 
    String name; 
    int emp_id; //and more fields related to Manager 

    public void attendsMeeting() 
    { 
     //Implements the method 
    } 
    public void reportsWorkDone() 
    { 
     //Implements the method 
    } 
    public void inputsHoursWorked() 
    { 
     //Implements the method 
    } 
    public void managesThings() 
    { 
     //Method specific to Manager class 
    } 
} 

class Engineer implements Employee 
{ 
    String name; 
    int emp_id; //and more fields related to Engineer 

    public void attendsMeeting() 
    { 
     //Implements the method 
    } 
    public void reportsWorkDone() 
    { 
     //Implements the method 
    } 
    public void inputsHoursWorked() 
    { 
     //Implements the method 
    } 
    public void developsApplication() 
    { 
     //Method specific to Engineer class 
    } 
} 

Из приведенного выше кода вы можете видеть, что Инженер и Менеджер - это два разных объекта. Они внедрили Employee, чтобы получить некоторые распространенные методы, которые унаследованы от Employee. Кроме того, они также получили методы, характерные для обоих подклассов. Даже унаследованные методы в обоих классах будут иметь такую ​​же реализацию. Так как эти два являются разными объектами, вы должны удалить объект «Инженер» и создать объект «Менеджер» для конкретного сотрудника (человека), если он продвинут.