🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

589閲覧

Java継承について

saku123

総合スコア5

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/12/02 02:39

編集2020/12/02 05:25

JavaプログラマBronze SE 7/8より
class A {}
class B extends A {}
class Test {
public static void main(String[] args){
A a = new A();
B b = (B)a;
}
}

このコードのコンパイル結果を求める問題で、回答が実行時エラーだったのですが、解説を読んでもいまいち理解できません。
継承により、キャストできないなどのルールがあるのでしょうか?

解説としては、
BクラスAクラスを継承しています。したがって6行目はコンパイルに成功しますが、a変数に代入しているのは5行目のAクラスのオブジェクトです。したがって実行時にエラーが発生します
とあります

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/12/02 02:42

どこにある「解説」でしょうか。 前提や背景は具体的に記載してください。 あと、コードはマークダウンでご提示ください。
Zuishin

2020/12/02 02:43

コンパイルエラーになるものの解説など読む必要はないでしょう。
momon-ga

2020/12/02 02:44

解説が書かれていないので、なにが理解できないのか答えられないですが・・・ AのインスタンスをBへキャストすることはできません。
mutsuki22

2020/12/02 02:52

どうしてコンパイルエラーになるのかが分からない感じですか? その解説が理解出来ないにしてもその解説の何がわからないかを説明を記載して頂かないとお答えが難しいです。
dodox86

2020/12/02 03:03

恐らくOracle認定資格 Java SE Silverとかの問題だと思うのですが、出典は明示しましょう。
dodox86

2020/12/02 03:06

> 解説を読んでもいまいち理解できません。 > A 選択肢「A」が正解、などと言う意味で記載されているのかもしれませんが、この質問を読んでいる誰にも分かりません。
m.ts10806

2020/12/02 04:14

出典明示してください。 内容に間違いがあればそれを出版元へ指摘しなければ間違った状態のまま広まることになります。
guest

回答2

0

回答がコンパイルエラーだったのですが

回答自体が誤り、もしくはここに転記するときに省略したもののほうが問題のキーポイントだった、という状況なのではないでしょうか。

実験してみたところ、コンパイルは可能でした(paiza.io)。

投稿2020/12/02 02:53

maisumakun

総合スコア145963

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/12/02 03:08

(回答後に質問が書き換わり、この回答の前提自体がおかしくなっています)
saku123

2020/12/02 03:11

回答後に申し訳ありません。コンパイルエラーはこちらの記述ミスでした。
guest

0

ベストアンサー

結論としては
スーパークラスAをサブクラスBにキャストすることはできません。

逆に「サブクラスBをスーパークラスAでキャスト」であればエラーにはなりません。

java

1class A {} 2class B extends A {} 3class Test { 4 public static void main(String[] args){ 5 B b = new B(); 6 A a = (A)b; 7 } 8}

ちなみにコンパイルエラーでなく実行時エラーではないでしょうか?

投稿2020/12/02 03:02

June666

総合スコア290

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問