問題
次のコードをコンパイル、実行するとどうなりますか。
public class Main {
public static void main(String... args) {
Base b = new Sub();
System.out.print("Base.id=" + b.id + ",Base::getID=" + b.getId() + " | ");
b.id = 20;
System.out.print("Base.id=" + b.id + ",Base::getID=" + b.getId() + " | ");
Sub s = (Sub) b;
System.out.print("Base.id=" + b.id + ",Base::getID=" + b.getId() + " | ");
s.id = 21;
System.out.print("Base.id=" + b.id + ",Base::getID=" + b.getId() + " | ");
}
}
class Base {
public int id = 10;
public int getId() {
return id;
}
}
class Sub extends Base {
int id = 11;
public int getId() {
return id;
}
}
選択肢
A) Base.id=10,Base::getID=11 | Base.id=20,Base::getID=20 | Sub.id=11,Sub::getID=11 | Sub.id=21,Sub::getID=21 | が出力される
B) Base.id=10,Base::getID=11 | Base.id=10,Base::getID=11 | Sub.id=20,Sub::getID=11 | Sub.id=21,Sub::getID=21 | が出力される
C) Base.id=10,Base::getID=10 | Base.id=10,Base::getID=10 | Sub.id=20,Sub::getID=20 | Sub.id=21,Sub::getID=21 | が出力される
D) Base.id=10,Base::getID=11 | Base.id=20,Base::getID=11 | Sub.id=11,Sub::getID=11 | Sub.id=21,Sub::getID=21 | が出力される
E) Base.id=10,Base::getID=10 | Base.id=10,Base::getID=20 | Sub.id=20,Sub::getID=20 | Sub.id=21,Sub::getID=21 | が出力される
F) Base.id=10,Base::getID=10 | Base.id=20,Base::getID=20 | Sub.id=11,Sub::getID=11 | Sub.id=21,Sub::getID=21 | が出力される
解答
A) Base.id=10,Base::getID=11 | Base.id=20,Base::getID=20 | Sub.id=11,Sub::getID=11 | Sub.id=21,Sub::getID=21 | が出力される
B) Base.id=10,Base::getID=11 | Base.id=10,Base::getID=11 | Sub.id=20,Sub::getID=11 | Sub.id=21,Sub::getID=21 | が出力される
C) Base.id=10,Base::getID=10 | Base.id=10,Base::getID=10 | Sub.id=20,Sub::getID=20 | Sub.id=21,Sub::getID=21 | が出力される
D) Base.id=10,Base::getID=11 | Base.id=20,Base::getID=11 | Sub.id=11,Sub::getID=11 | Sub.id=21,Sub::getID=21 | が出力される
E) Base.id=10,Base::getID=10 | Base.id=10,Base::getID=20 | Sub.id=20,Sub::getID=20 | Sub.id=21,Sub::getID=21 | が出力される
F) Base.id=10,Base::getID=10 | Base.id=20,Base::getID=20 | Sub.id=11,Sub::getID=11 | Sub.id=21,Sub::getID=21 | が出力される
対象資格:Java SE17 認定資格