如何将祖先复制到后代

时间:2009-06-11 17:31:25

标签: java inheritance copy clone

假设我有一只动物,现在我想把它变成一只狗。我如何在java中执行此操作?

现在我有一个看起来像

的构造函数
public Dog(Animal animal) {
  this.setProperty(animal.getProperty);
  ...
}

虽然这有效,但它很脆弱。还有其他建议吗?

4 个答案:

答案 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对象已经继承了属性。