ダウンキャストできません

このQ&Aのポイント
  • 参照型の縮小変換(ダウンキャスト)したいのですが、できません。
  • コンパイルは成功するのですが、実行すると最後の方にException in ~という風にエラーがでてしまいます。
  • RobotPet q=(RobotPet)new Pet("ドラえもん","のび太");の部分でダウンキャストできてない?みたいなのですが、どうしたらダウンキャストできるのでしょうか?
回答を見る
  • ベストアンサー

ダウンキャストできません

参照型の縮小変換(ダウンキャスト)したいのですが、できません。 ◇私はロボット。名前はR2D2。値段は1000です。 ◇ご主人様はルーク。 ◇私はロボット。名前はR2D2。値段は1000です。 ◇ご主人様はルーク。 Exception in thread "main" java.lang.ClassCastException: Pet at PetTester1.main(PetTester1.java:15) コンパイルは成功するのですが、 実行すると最後の方にException in ~という風にエラーがでてしまいます。 実行ファイルの RobotPet q=(RobotPet)new Pet("ドラえもん","のび太"); の部分でダウンキャストできてない?みたいなのですが、どうしたらダウンキャストできるのでしょうか? よろしくお願いします。

  • Java
  • 回答数2
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.2

new Pet(…)で作ったものはPet型のインスタンスなので、どうやってもRobotPet型にはキャストできません。もしそんなことができてしまうなら、RobotPetだけが持っているnedan属性はどこから与えられるのでしょうか? Javaでは変数とインスタンスのそれぞれに型があることを意識してください。 ・Pet型の変数には、Pet型のインスタンスとRobotPet型のインスタンスのどちらも代入できる ・RobotPet型の変数にはRobotPet型のインスタンスは代入できるがPet型のインスタンスは代入できない ダウンキャストできるのはPet型の変数にRobotPet型のインスタンスが代入されていた場合だけです。 Pet p; RobotPet q; p = new RobotPet(…); q = (RobotPet)p; // これはOK p = new Pet(…); q = (RobotPet)p; // これは例外が発生する

wooyan_52
質問者

補足

>>ダウンキャストできるのはPet型の変数にRobotPet型のインスタンスが代入されていた場合だけです。 >>Pet p; >>RobotPet q; >>p = new RobotPet(…); >>q = (RobotPet)p; // これはOK これがダウンキャストだったのですね。 nedan属性なしでもできなくて、 参考書では RobotPet q=(RobotPet)new Pet("Kurt","アイ");でダウンキャスト可能ってあったのですが、 やっぱりこれおかしいですよね…? 有難うございました。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ソースは見てないけど, それを「ダウンキャスト」と呼んでるということは 「RobotPet は Pet のサブクラス」 ってこと? もしそうなら, それは失敗して当然. むしろ, この「ダウンキャスト」が成功すると思う方がおかしい.

wooyan_52
質問者

補足

>>「RobotPet は Pet のサブクラス」ってこと? 4行目に書いてある通り、そうです。 参考書には「このようにキャスト演算子を明示的に適用すればダウンキャストは可能です。」と書いてあるので。

関連するQ&A

  • Nodeのキャストに失敗します

    よろしくお願い致します。 Javaで、ノードリストからひとつの要素を抽出しようとしていまして、下のようなソースコードを書いています。 NodeList pNodeList; Element pNode; pNodeList = pParentNode.getChildNodes(); pNode = (Element) pNodeList.item(j); 上のソースでコンパイルはとおりますが、キャストを行っている行で下のようなエラーメッセージが表示され、処理が終了してしまいます。 Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.DeferredTextImpl 原因に心当たりのある方、申し訳ないですがご教示願います。

    • ベストアンサー
    • Java
  • Javaの実行できません、教えてください。

    Javaの実行できません、教えてください。 http://members2.jcom.home.ne.jp/take_1118/Applet39.html このページのサンプルプログラムを実行したいですが、どうしても Exception in thread "main" java.lang.NoSuchMethodError:main というエラーが出るため、実行できません。 どうすればできるんでしょうか?教えてください、お願いします。 サンプルプログラムではmainメソッドが含まれていないようですが、そうすれば実行できるんでしょうか?

  • Javaプログラミングが実行できない

    javaの勉強を始めようと考え勉強しているのですが、いきなりつまずいて困っています。 コンパイラし、dirを打ったあとプログラムを実行すると Exception in thread "main" java.lang.NoClassDefFoundError: Sample01 と表示され実行できません。 アドバイスお願いします。

    • ベストアンサー
    • Java
  • Java起動・・・?

    学校でJavaの勉強をしています。 そこで家でもやってみようと思い学校と同じやり方をしたのですが起動?しません。 コマンドプロンプトで実行しているのですが、 Exception in thread "main" java.lang.NoClassDefFoundErrorと出ます。 どのようにすれば出来るようになりますか?

    • ベストアンサー
    • Java
  • コンパイルできたのですけど…

    今までコンパイルできてmainメソッドの実行がコンソール上でできていたのですけどException in thread "main" java.lang.ArrayIndexOutOfBoundsException:5 at sampled5l4.main(sampled5l4.java:26) というのがコンソール上にでて実行できません。コンパイルされて、クラスファイルもできているのになぜ実行ができないのでしょうか?ちなみにほかのやつはちゃんと実行できます。どこを直せばいいのでしょうか?ご教授お願いします。jdk1.5.0です。

    • ベストアンサー
    • Java
  • 実行時に出るエラーの意味が解りません

    Javaで、「SystemFont 」というクラス名をつけて プログラムを組み、コンパイルしてその後実行したところ Exception in thread "main" java.lang. NoClassDefFoundError:SystemFont というエラーが表示されるだけで実行できません。 このエラーの示す意味をどなたか教えて頂けませんか?

    • ベストアンサー
    • Java
  • Javaアプリケーションについて

    次のようなプログラムを作ってコンパイルをしました。 public class app { public static void main(String[] args) { System.out.println("Hello from Java!"); } } コンパイルまではできるのですが、 java appで実行しようとすると Exception in thread "main" java.lang.NoClassDefFoundError:app となって、アプリケーションを実行することができません。 本には、これで実行できると書いてあるのですが・・・ どなたか教えてください。

    • ベストアンサー
    • Java
  • コンパイルできるのに実行できない

    はじめまして。 最近JAVAを始めようと思ったんですが、早くも行き詰まってしまいました。 コンパイルは出来るんですが、実行されないのです。 以下のような文章が出てきます。 Exception in thread "main" java.lang.NoClassDefFoundError: Hello ちなみに、買った本のサンプルプログラムでも同じでした。 これは何が原因なんでしょうか? よろしくお願いします。

  • Javaの実行エラーが起きます。

    Javaの実行エラーが起きます。 Exception in thread "main" java.lang.UnsatisfiedLinkError: no nativetimer in java.library.pathの解決方法 現在、大学で研究をしており、その関係でネットからひろったJavaのプログラムを動かそうとしているのですが、実行すると上記のようなエラーにより実行できずに困っています。eclipseを使っています。何か解決方法があれば、教えてください。

    • ベストアンサー
    • Java
  • javamailについて

    javamailでメール送信を行いたいのですが、プロンプトでコンパイルはとおるのですが、実行すると 「Exception in thread "main" java.lang.NoClassDefFoundError: TestMail」 というエラーが出ます。 何が原因でしょうか?

    • ベストアンサー
    • Java

専門家に質問してみよう