問題
次のコードをコンパイル、実行するとどうなりますか。
public class Main {
public static void main(String... args) {
TypeA o1 = new Base();
TypeA o2 = new Sub();
TypeA o3 = new Base();
TypeA o4 = new Sub();
o1.print("Duke");
o2.print("Duke");
o3.print("Duke");
o4.print("Duke");
}
}
interface TypeA {
default void print(String s) {
System.out.print(s + ",");
}
}
interface TypeB {
void print(String s);
}
class Base implements TypeA, TypeB {
public void print(String s) {
TypeA.super.print(s);
}
}
class Sub extends Base {
public void print(String s) {
System.out.print(s + ":");
}
}
選択肢
A)Duke,Duke:Duke:Duke: が出力される
B)コンパイルエラーになる
C)Duke,Duke,Duke,Duke: が出力される
D)ClassCastException がスローされる
E)Duke,Duke:Duke,Duke: が出力される
F)Duke,Duke,Duke,Duke, が出力される
解答
A)Duke,Duke:Duke:Duke: が出力される
B)コンパイルエラーになる
C)Duke,Duke,Duke,Duke: が出力される
D)ClassCastException がスローされる
E)Duke,Duke:Duke,Duke: が出力される
F)Duke,Duke,Duke,Duke, が出力される
解説
public class Main {
public static void main(String... args) {
TypeA o1 = new Base(); //1-1.
TypeA o2 = new Sub(); //2-1.
TypeA o3 = new Base(); //3-1.
TypeA o4 = new Sub(); //4-1.
o1.print("Duke"); //1-2.
o2.print("Duke"); //2-2.
o3.print("Duke"); //3-2.
o4.print("Duke"); //4-2.
}
}
interface TypeA {
default void print(String s) { //1-3. 3-5.
System.out.print(s + ","); //1-4. 3-6. Dukeを出力
}
}
interface TypeB {
void print(String s);
}
class Base implements TypeA, TypeB {
public void print(String s) { //3-3.
TypeA.super.print(s); //3-4.
}
}
class Sub extends Base {
public void print(String s) { //2-3. 4-3.
System.out.print(s + ":"); //2-4. 4-4. Dukeを出力
}
}
対象資格:Java SE17 認定資格