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

В практиката, която правя сега, имам 3 класа в йерархията: Служител (абстрактен клас) Работник разширява Служител Мениджър разширява Служител

Имам допълнителен клас, който използва тези 3 класа: Factory.

Сега трябва да създам метод, който добавя Employee e към масив от Employees. Атрибути:

_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 class е абстрактен, не мога да направя това.

Това е практика на полиморфизъм, така че предполагам, че професорът е искал да поставим работници и мениджъри в масива, но не мога да добавя работници и мениджъри към масива в метода.

Всяка помощ ще бъде страхотна,

Благодаря ти.


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