これは、Java のように OOP を中心としたものでは非常に一般的なことだと確信しています。Javaでは、継承されたすべてのサブタイプを受け入れる基本型変数を作成する方法はありますか? 私が持っているかのように;
class Mammal {...}
class Dog extends Mammal {...}
class Cat extends Mammal {...}
class ABC {
private Mammal x;
ABC() {
this.x = new Dog();
-or-
this.x = new Cat();
}
}
任意の拡張バージョンも受け入れることができる変数が必要ですが、特定の 1 つの拡張された種類ではありません。
私が知っているが使いたくない方法がいくつかあります。サブタイプごとに属性を作成し、実際に使用する属性を 1 つだけにすることができます。配列を作成し、そこに押し込みます。
「基本クラス」型変数を取得する他のアイデアや方法はありますか?
ポリモーフィック ダック タイピングを Java で使用するのは良いアイデアではないことはわかっていますが、それを避けることはできないと思います。サブクラス メソッドを動的に使用して変数のキャスト バージョンを再割り当てする唯一の方法です。つまり、これでエラーが発生します。
Mammal x;
x = new Dog();
System.out.println(x.getClass());
x.breath();
if (x instanceof Dog) {
x.bark();
} else if (x instanceof Cat) {
x.meow();
}
シンボルが見つからないと言っていますが、これは機能します。
Mammal x;
x = new Dog();
System.out.println(x.getClass());
x.breath();
if (x instanceof Dog) {
Dog d = (Dog) x;
d.bark();
} else if (x instanceof Cat) {
Cat c = (Cat) x;
c.meow();
}
それを行う唯一の方法は最後のものですか?