問題
次のコードでコンパイルエラーになる箇所は(1)から(9)のどれですか。(3つ選択)
public class Main {
public static void main(String... args) {
Base b = new MyClass();
MyType t = new MyClass();
b.print("one"); //(1)
(MyType)b.print("two"); //(2)
((MyType)b).print("three"); //(3)
t.print("four"); //(4)
(MyType)t.print("five"); //(5)
((MyType)t).print("six"); //(6)
}
}
sealed interface MyType permits MyClass { //(7)
void print(String s);
}
class Base { //(8)
public static final String DELIMITER = ",";
}
final class MyClass extends Base implements MyType { //(9)
public void print(String s) {
System.out.print(s + Base.DELIMITER);
}
}
選択肢
A)(1)
B)(2)
C)(3)
D)(4)
E)(5)
F)(6)
G)(7)
H)(8)
I)(9)
解答
A)(1)
B)(2)
C)(3)
D)(4)
E)(5)
F)(6)
G)(7)
H)(8)
I)(9)
解説
コンパイルエラーになる箇所
- (1)
b.print("one");
- 理由:
Base
クラスにはprint
メソッドが定義されていません。したがって、この呼び出しはコンパイルエラーになります。
- 理由:
- (2)
(MyType)b.print("two");
- 理由:
(MyType)b
はBase
型のオブジェクトであり、Base
クラスにprint
メソッドは存在しません。したがって、b.print("two")
の結果をMyType
にキャストすることはできず、これもコンパイルエラーになります。
- 理由:
- (3)
((MyType)b).print("three");
- 理由: 同様に、
(MyType)b
はBase
型のオブジェクトで、Base
にはprint
メソッドがありません。したがって、この行もコンパイルエラーになります。
- 理由: 同様に、
- (4)
t.print("four");
- 理由:
t
はMyType
インターフェースのインスタンスで、print
メソッドが正しく実装されているため、これは正常にコンパイルされます。
- 理由:
- (5)
(MyType)t.print("five");
- 理由:
t.print("five")
はvoid
メソッドであるため、戻り値を持ちません。このため、(MyType)t.print("five");
はコンパイルエラーになります。
- 理由:
- (6)
((MyType)t).print("six");
- 理由: これは正常です。
t
はMyType
型なので、print
メソッドを正しく呼び出すことができます。
- 理由: これは正常です。
正しい選択肢
コンパイルエラーになる箇所は以下の3つです。
- (1)
b.print("one");
- (2)
(MyType)b.print("two");
- (5)
(MyType)t.print("five");
したがって、正しい選択肢は A(1)、B(2)、E(5) です。
対象資格:Java SE17 認定資格