2017-10-06 9 views
-4

次の演習とちょっと混乱していて、検索機能でそのような質問が見つかりませんでした。Javaでの継承のバージョンとキャスト

間違っ
(1) Animal t = new Object(); 
(2) Animal t = (Dog) (new Object()); 
(3) Animal t = new Dog(); 
(4) Animal t = (Dog) new Class(); 
  1. class Animal 
    class Dog extends Animal //Dog is an extension of Animal 
    

    我々はタイプAnimalの変数にクラスDogのオブジェクトを割り当てる:ことを考えると、実行可能なこれらの選択肢の

    :それは犬とは関係がないので間違っています。

  2. 良い:オブジェクトはDogの上位クラスで、動物を拡張するDogにキャストするので、大丈夫です。
  3. 良い:すべての犬は動物であるため、大丈夫です。
  4. 間違っている:新しいクラスはdefiendではないので、間違っています。

私の推論は正しいのですか?私はあらゆる助けに感謝しています。

+3

これはかなり簡単にテストできますか? – Blorgbeard

+1

あなたの質問に答えはしませんが、検索したい魔法のキーワードは 'java polymorphism'です – engineercoding

+1

オブジェクトのクラスはオブジェクト自体の品質です。どのようにキャストしても、オブジェクトのクラスは変更されず、コードがそのクラスを表示する方法だけが変更されます。作成したオブジェクトがAnimalから継承するクラスでない場合、キャストはそれをAnimalにしません。 – VGR

答えて

0

はそれらを試していないが、私は思う:

(1) Animal t = new Object(); 

無効 - ObjectAnimalではありませんが - ObjectAnimalではありません - - 意志

(2) Animal t = (Dog) (new Object()); 

無効にコンパイルされませんコンパイルは実行時に失敗します。

(3) Animal t = new Dog(); 

罰金 - Dogが、これは(2)と同じであるAnimal

(4) Animal t = (Dog) new Class(); 

では - あなたは右のそれをコピーし、特定されていますか?

+0

はい、私はしました。これはおそらく簡単な質問の1つですが、私は非常に混乱しました。特にwhith(2)と(3)。ありがとうございます。 – PeterPan