プロが教えるわが家の防犯対策術!

Javaの継承についてです。
このコードだとコンパイルエラーになるそうなんですが、
BとCに互換性がないと代入出来ずにコンパイルエラーが発生するのはなぜですか?

「Javaの継承についてです。 このコード」の質問画像

A 回答 (5件)

4行目ですが。


a = new C();
B型をC型に変換できません。
    • good
    • 0

なんか不思議な質問だなぁ....



「互換性がない」ときに代入できると, 何がどう「うれしい」んだろうか.
    • good
    • 0

> int型の変数にString型の値を代入しようとしている感じですか?


intはプリミティブ型、StringはObjectを継承したクラスなので同じではありませんが、まぁイメージとしては同じ感じです。

Objectクラスを継承したクラスとしてはString、Integerがあります。
それをサンプルにしてコードを書きました。
Objectクラスの変数にStringクラス、Integerクラスを代入するのは動きますが、
Stringクラスの変数にIntegerクラス、Integerクラスの変数にStringクラスを代入するのは動きません。
いかに継承元が同じだったとしても、クラスが違えば代入できないことが分かると思います。
https://paiza.io/projects/Gp4CWbGk2_sYQU-hvUF5Xg

よって、下記コードのように、変数定義にvarを利用せず、Aクラスを明示することで、Cクラスも代入可能です。
(varの説明は既に回答がある通り)
https://paiza.io/projects/m9Ly2C0qh_av1igA_fYeyw
    • good
    • 0

var とは型名の記載を一部省略できる記法です


例)
var a = new B()

B a = new B() // 右辺から推測した型と読み替える

B を継承していない C 型オブジェクトは、
B 型変数に代入できません。
例)
B a = new C()
    • good
    • 0

BクラスとCクラスは、Aクラスを継承していることは共通してるけど、それぞれは型が違うから。


変数aの型をAクラスに定義していればエラーになりませんね。
    • good
    • 1
この回答へのお礼

int型の変数にString型の値を代入しようとしている感じですか?

お礼日時:2022/02/08 12:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!