問題
次のコードについて正しい説明はどれですか。
public class Main {
public static void main(String[] args) {
String[] names = { "Duke", "Scott", "Sakila" };
MyClass c = new MyClass();
c.print(names);
}
}
class MyClass {
public void print(String[] args) {
for(String str : args) {
System.out.print(str + " ");
}
}
public void print(String... varArgs) {
for(String str : varArgs) {
System.out.print(str + " ");
}
}
}
選択肢
A)varArgs は拡張for文で使用できないため、コードはコンパイルエラーになる
B)コードはコンパイルされ、(2)のメソッドが呼び出されて Duke Scott Sakila が出力される
C)コードはコンパイルできるが、実行時に例外がスローされる
D)コードはコンパイルされ、(1)のメソッドが呼び出されて Duke Scott Sakilaが出力される
E)print メソッドは正しくオーバーロードされていないため、コードはコンパイルエラーになる
F)print メソッドは正しくオーバーライドされていないため、コードはコンパイルエラーになる
解答
A)varArgs は拡張for文で使用できないため、コードはコンパイルエラーになる
B)コードはコンパイルされ、(2)のメソッドが呼び出されて Duke Scott Sakila が出力される
C)コードはコンパイルできるが、実行時に例外がスローされる
D)コードはコンパイルされ、(1)のメソッドが呼び出されて Duke Scott Sakilaが出力される
E)print メソッドは正しくオーバーロードされていないため、コードはコンパイルエラーになる
F)print メソッドは正しくオーバーライドされていないため、コードはコンパイルエラーになる
解説
MyClassクラスに定義されているprint(String[] args)と(String… varArgs)はともに、配列と可変長引数は同じ意味のため重複しており、オーバーロードになっていないためコンパイルエラーとなります。
public class Main {
public static void main(String[] args) {
String[] names = { "Duke", "Scott", "Sakila" };
MyClass c = new MyClass();
c.print(names);
}
}
class MyClass {
public void print(String[] args) { //String...と重複
for(String str : args) {
System.out.print(str + " ");
}
}
public void print(String... varArgs) { //String[]と重複
for(String str : varArgs) {
System.out.print(str + " ");
}
}
}
対象資格:Java SE17 認定資格