Java言語についての次の説明のうち、最も適切なものを選べ。ただし、クラスA, Bの定義は次のようであるとし、変数 va の型はクラスA、変数 vb の型はクラス B, メソッド mb はクラスA 内では宣言されていないものとする。
Class A {
int ma () { ... }
}
Class B extends A {
int mb () { ... }
}
@ メソッド呼び出し va.mb() は、コンパイル時にはエラーにならない可能性がある。
A メソッド呼び出し vb.ma() は、実行時に必ずエラーになる。
B 変数 va にはクラス B のインスタンスは代入できない。
C 代入文vb = va; は、コンパイル時の型検査ではエラーにならない。
D 代入文va = (B)va; は、実行時にエラーになる可能性がある。
D
@ mb() はクラスAのメンバではないので、コンパイル時にはエラーになる。
A ma() はクラスBのスーパークラス(クラスA) のメンバであるため、エラーにならない。
B サブクラスであるクラスBのインスタンスは、スーパークラスの変数に代入できる。
C 変数 va は vb のメンバをすべて持っているわけではないので、コンパイル時の型検査でエラーになる。
D 正しい。(B)va とすることをキャストと呼ぶ。キャストは実行時にエラーになる場合もあるし、ならない場合もある。
W−7 | 目次 | W−9 |