1

Javaでアッパーキャスト型を強制することは可能ですか? 例を参照してください。

public class Animal{}

public class Dog extends Animal{}

Dog dog = new Dog();  
Animal test = dog;

私が持っているもの:(test instanceof Dog)そして(test instanceof Animal)trueを返します。
私が欲しいもの: (test instanceof Dog)== false および(test instanceof Animal)== true

テストを強制的に動物だけにする方法はありますか? または、動物が犬を追い越すためのコンストラクターを作成する唯一の方法はありますか? 多くのゲッター/セッターを備えた複雑なオブジェクトがあったため、コンストラクターの作成を避けようとしていました。

ありがとう。

4

5 に答える 5

7

Animalオブジェクトが であるが ではないことを気にする理由がわかりません。Dog結局のところ、 aDogAnimalです。Dogに適用できるものはすべて に適用できますAnimal。そうでない場合は、設計上の問題があります。

ただし、それを決定する必要がある場合は、getClass()(によって定義されたObject) を呼び出してClassオブジェクトを取得し、それを と比較しAnimal.classます。

if (Animal.class == test.getClass())
于 2013-08-19T16:57:53.947 に答える
2
if (test.getClass() == Animal.class) {...
于 2013-08-19T16:57:49.850 に答える
1

テストDog のインスタンスで、testanimal のインスタンスです。

これは問題ではなく、OO プログラミングの基本の 1 つです。ポリモーフィズム。

タイプが正確に Type animal であることを確認する理由が何であれ、設計が不十分である可能性があります。

于 2013-08-19T16:57:46.507 に答える