0

私が動物を飼っていて、それを犬にしたいとしましょう。Javaでこれを行うにはどうすればよいですか?

今、私は次のようなコンストラクタを持っています

public Dog(Animal animal) {
  this.setProperty(animal.getProperty);
  ...
}

これは機能しますが、壊れやすいです。他の提案はありますか?

4

4 に答える 4

5

Dog が Animal を拡張する場合、Animal を受け取り、スーパー (親) コンストラクターを初期化するコンストラクターを作成できます。

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);
于 2009-06-11T17:41:42.250 に答える
0

あなたが何を望んでいるのか正確にはわからないので、動物オブジェクトをアップグレードして犬オブジェクトにしたいと仮定します。

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

これはあなたが望むものではないかもしれませんが、オブジェクトがその状態に応じて大幅に異なる動作を持つ必要がある場合に役立ちます。

于 2009-06-12T10:13:49.073 に答える
0

工場を使ってみてください。コンストラクターに基づくのではなく、ファクトリを使用して、制約に基づいて特定のタイプのアニマルを返します。

于 2009-06-12T09:57:53.963 に答える
-1

Animal クラスをサブクラス化しますか? 以下を使用することもできます。

public class Dog extends Animal { 
    public Dog () {
        super();
        // other constructor stuff
    }
}

その場合、Dog オブジェクトは既にプロパティを継承しています。

于 2009-06-11T17:38:32.897 に答える