假设我有一只动物,现在我想把它变成一只狗。我如何在java中执行此操作?
现在我有一个看起来像
的构造函数public Dog(Animal animal) {
this.setProperty(animal.getProperty);
...
}
虽然这有效,但它很脆弱。还有其他建议吗?
答案 0 :(得分:5)
如果你的Dog扩展了Animal,你可以创建一个构造函数来获取Animal并初始化super(父)构造函数:
public class Dog extends Animal {
public Dog(Animal animal) {
super(animal);
}
}
假设您有一个具有此表单的复制构造函数的Animal类:
public class Animal {
public Animal(Animal animal) {
// copies all properties from animal to this
}
}
您可以通过以下方式创建动物狗:
Dog newDog = new Dog(myExistingAnimal);
答案 1 :(得分:0)
尝试使用工厂。而不是基于构造函数,使用工厂根据您的约束条件返回特定类型的Animal。
答案 2 :(得分:0)
我不确定你想要什么,所以我假设你想要将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
这可能不是你想要的,但是当一个对象具有截然不同的行为时,它可能很有用,具体取决于它的状态。
答案 3 :(得分:-1)
你想继承Animal类吗? 你也可以使用:
public class Dog extends Animal {
public Dog () {
super();
// other constructor stuff
}
}
然后你的Dog对象已经继承了属性。