問題
次のコードの//[ A ] の部分に記述するとコンパイルエラーになるものはどれですか。(3つ選択)
class MyClass {
public int execute(int a, int b) {
return a + b;
}
//[ A ]
}
選択肢
A)
public int execute(int i) {
return i * 5;
}
B)
public int execute(long l,Integer i) {
return (int)l + i;
}
C)
public int execute(Integer i, Integer j) {
return i + j;
}
D)
public long execute(Integer i) {
return i.longValue();
}
E)
public void execute(int m, int n) {
int o = m + n;
}
F)
public int execute(int x, int y) {
return x + y;
}
G)
public int execute(long l, long m) {
return (int)l + m;
}
解答
A)
public int execute(int i) {
return i * 5;
}
B)
public int execute(long l,Integer i) {
return (int)l + i;
}
C)
public int execute(Integer i, Integer j) {
return i + j;
}
D)
public long execute(Integer i) {
return i.longValue();
}
E)
public void execute(int m, int n) {
int o = m + n;
}
F)
public int execute(int x, int y) {
return x + y;
}
G)
public int execute(long l, long m) {
return (int)l + m;
}
解説
コンパイルエラーになる選択肢を見ていきましょう。
コードの概要
javaコードをコピーするclass MyClass {
public int execute(int a, int b) {
return a + b;
}
//[ A ]
}
元のメソッド execute(int a, int b)
に基づき、以下の条件でコンパイルエラーを確認します:
- シグネチャが同じ(オーバーロードの衝突)
- 引数の数が異なるが、戻り値の型が異なる(オーバーロードの衝突)
選択肢の確認
A)
public int execute(int i) {
return i * 5;
}
- 解説: 同じ名前と引数の型(
int
)で引数の数が異なるため、オーバーロードの衝突が起きる。→ コンパイルエラー。
B)
public int execute(long l, Integer i) {
return (int)l + i;
}
- 解説: 引数の型が異なるため、別のメソッドとして扱われる。→ 問題なし。
C)
public int execute(Integer i, Integer j) {
return i + j;
}
- 解説: 同じ名前で異なる引数の型(
Integer
)のため、オーバーロードの衝突はない。→ 問題なし。
D)
public long execute(Integer i) {
return i.longValue();
}
- 解説: 同じ名前で異なる引数の型(
Integer
)のため、オーバーロードの衝突はない。→ 問題なし。
E)
public void execute(int m, int n) {
int o = m + n;
}
- 解説: 同じ名前と引数の型(
int
)で引数の数が同じため、オーバーロードの衝突が起きる。→ コンパイルエラー。
F)
public int execute(int x, int y) {
return x + y;
}
- 解説: 同じ名前と引数の型(
int
)で引数の数が同じため、オーバーロードの衝突が起きる。→ コンパイルエラー。
G)
public int execute(long l, long m) {
return (int)l + m;
}
- 解説: 引数の型が異なるため、別のメソッドとして扱われる。→ 問題なし。
コンパイルエラーになる選択肢
これらの選択肢がコンパイルエラーを引き起こします。したがって、正しい選択肢は A, E, F です。
対象資格:Java SE17 認定資格