Полиморфизм и абстрактный родительский класс

В практике, которую я делаю сейчас, у меня есть 3 класса в иерархии: Employee (абстрактный класс) Worker extends Employee Manager extends Employee

У меня есть дополнительный класс, который использует эти 3 класса: Factory.

Теперь мне нужно создать метод, который добавляет Employee e в массив сотрудников. Атрибуты:

_emps — массив типа Сотрудник. _numOfEmpes — указывает количество сотрудников в массиве.

Это код, который я написал:

public boolean addEmployee(Employee e){
    if (this._numOfEmps<MAX_EMPS)
    {
        this._emps[this._numOfEmps]=e;
        return true;
    }
    return false;
}

Проблема в том, что я думаю, что по строке:

this._emps[this._numOfEmps]=e;

Я создаю массив объектов-псевдонимов, что я не уверен, что мне нужно делать. Что я обычно делал, так это:

this._emps[this._numOfEmps)=new Employee(e);

Но поскольку класс Employee абстрактен, я не могу этого сделать.

Это практика полиморфизма, поэтому я думаю, профессор хотел, чтобы мы поместили Рабочих и Менеджеров в массив, но я не могу добавить Рабочих и Менеджеров в массив в методе.

Любая помощь будет отличной,

Спасибо.


person Assaf    schedule 13.04.2013    source источник
comment
Вы должны сделать массив типа Employee. Таким образом, вы можете поместить в него любые классы, которые расширяют Employee.   -  person Lukas Knuth    schedule 13.04.2013
comment
У меня есть, и это работает, однако я беспокоюсь, не проблема ли созданный мной псевдоним.   -  person Assaf    schedule 13.04.2013
comment
Массивы в java полиморфно ковариантны. Это означает, что массив, объявленный для хранения объектов класса Employee, сможет обрабатывать все его подклассы.   -  person prashant    schedule 13.04.2013
comment
@Assaf, каких проблем ты ожидаешь?   -  person Lukas Knuth    schedule 13.04.2013
comment
@LukasKnuth Я просто не знаю, когда псевдонимы в порядке, а когда нет. Я думаю, что сейчас это нормально, учитывая текущую практику. Спасибо   -  person Assaf    schedule 13.04.2013
comment
@Assaf это зависит от того, что делает ваш класс. Если это простой класс инкапсуляции данных, вы должны сделать его неизменяемым.   -  person Lukas Knuth    schedule 13.04.2013
comment
@LukasKnuth Спасибо.   -  person Assaf    schedule 13.04.2013


Ответы (1)


Я думаю, что совершенно нормально создавать массив эталонных объектов. С этим не должно быть проблем.

Однако, если вы хотите создавать копии, то проверьте метод clone, реализуйте его и используйте в addEmployee.

Вот пример того, как реализовать Cloneable — http://www.jusfortechies.com/java/core-java/cloning.php

затем

this._emps[this._numOfEmps]=e.clone();
++this._numOfEmps;
person user93353    schedule 13.04.2013