Я не уверен точно, что вы хотите, поэтому я собираюсь предположить, что объект Animal обновлен на месте, чтобы быть объектом Dog.
class AnimalImpl {
// ...
}
class DogImpl extends AnimalImpl {
// ...
}
class Animal {
private AnimalImpl implementation;
public Animal() {
implementation = new AnimalImpl;
}
public void becomeADog() {
implementation = new DogImpl(implementation);
}
// ...
}
Используйте это так:
Animal animal = getAnAnimalFromSomewhere();
// `animal` has generic Animal behaviour
animal.becomeADog();
// `animal` now has Dog behaviour
Это может быть не то, что вы хотите, но это может быть полезно, когда объект должен иметь существенно различное поведение в зависимости от его состояния.
Что вас интересует: 1) Принимая общий экземпляр Animal и используя его для создания более специализированного экземпляра Dog? OR 2) Принимая специализированный экземпляр некоторого подкласса Animal, кроме Dog, и используя его для создания нового экземпляра Dog. Я предполагаю, что Собака является подклассом Животных, так как вы спрашиваете о «[копировании] предка потомству» –
У меня есть экземпляр «Животного» и вы хотите превратить его в экземпляр «Собака», , затем добавьте все свойства моей собаки. – Preston