参照型の縮小変換(ダウンキャスト)したいのですが、できません。
◇私はロボット。名前は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("ドラえもん","のび太");
の部分でダウンキャストできてない?みたいなのですが、どうしたらダウンキャストできるのでしょうか?
よろしくお願いします。
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; // これは例外が発生する
この回答への補足
>>ダウンキャストできるのはPet型の変数にRobotPet型のインスタンスが代入されていた場合だけです。
>>Pet p;
>>RobotPet q;
>>p = new RobotPet(…);
>>q = (RobotPet)p; // これはOK
これがダウンキャストだったのですね。
nedan属性なしでもできなくて、
参考書では
RobotPet q=(RobotPet)new Pet("Kurt","アイ");でダウンキャスト可能ってあったのですが、
やっぱりこれおかしいですよね…?
有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- Visual Basic(VBA) セルの値からファイルを複数作りたい2 3 2022/10/07 15:54
- がん・心臓病・脳卒中 がんの術後にもPET CT検査を受けた方がいいですか? 家族が手術をして数年経過しています。 通院し 15 2022/04/13 14:16
- クラフト・工作 PETボトルのフタを使ったケースを作りたいです。 何か良い方法はありますか。 作りたいケースの容積は 1 2022/07/10 08:26
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- ポイントサービス・マイル イオン系店頭に、PETボトルを回収してポイントを付けてくれる機械 2 2023/08/15 14:21
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- 飲食業・宿泊業・レジャー スナックを経営しております。私の前でお客様がキャストに「疑似恋愛の雰囲気だしてこないじゃん」「お店潰 2 2023/03/12 16:58
- 化学 PETやPEを加熱すると有害物質が発生しますか? 1 2022/07/24 09:42
- がん・心臓病・脳卒中 父が肺腺ガンです。 3週間に一度、抗がん剤治療をしていますが、 腸の痛さが出始め調べると腸に癌が飛ん 13 2023/03/03 00:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
インスタンス参照でアクセスで...
-
private static という変数の修飾
-
C#において、同じインスタンス...
-
変数名の付け方
-
生成したインスタンスを削除す...
-
VB.NET getとsetの概念がわかり...
-
C# インスタンスの破棄
-
C#「オブジェクト参照が必要で...
-
他のファイルの変数参照
-
複数の変数を宣言する時、同時...
-
[Visual C#] 優先される処理に...
-
サーブレットでレスポンスが返...
-
インスタンスを同じ名前で作成...
-
文字列を日付に変換でParseExce...
-
エクセル(複数インスタンス)...
-
サーブレットのスレッド管理に...
-
C#のスレッド処理について、ご...
-
MDIでフォームがアクティブにな...
-
VB6.0で、DLLを動的に参照したい
-
インスタンス生成で、○○.xxx();...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
C# インスタンスの破棄
-
newしないインスタンス?実体化...
-
SQLを連続発行する時の正しい(?...
-
「インスタンス」の意味をわか...
-
文字列を日付に変換でParseExce...
-
変数の参照でエラーが出てしま...
-
フォームの存在をチェックする方法
-
javaのクラスの作り方、エラー...
-
オブジェクト参照がオブジェク...
-
String a = "a"; と String b =...
-
エクセル(複数インスタンス)...
-
C#「オブジェクト参照が必要で...
-
他のファイルの変数参照
おすすめ情報