Как клонировать объект, который был объявлен как абстрактный суперкласс? - PullRequest
2 голосов
/ 25 февраля 2012

У меня есть метод, который получает абстрактный класс в качестве аргумента для целей полиморфизма. Но внутри метода я хочу вернуть копию реального объекта.

Пример:

//Animal is an abstract class
public Animal findAndClone(Animal[] zoo){
  for (Animal a:zoo)
    //find some animal...
    return new Animal(a) //cant instantiate an abstract class 
}

Я пытался использовать конструктор копирования, как показано выше, но он не может создать реферат. Я думал об определении clone() в базовом классе, но я сталкиваюсь с той же проблемой в базовом классе. Как это сделать правильно?

Спасибо.

1 Ответ

1 голос
/ 25 февраля 2012

Если вы не хотите полагаться на метод dodgy Object.clone , вам лучше создать абстрактный метод copy в Animal и убедиться, что все подклассы переопределяют его правильно.

abstract class Animal {
    ...
    // Needs to be implemented by subclasses. A Dog returns a Dog, etc...
    public abstract Animal copy();
    ...
}

, а затем вместо

return new Animal(a);

вы делаете

return a.copy();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...