super で親のフィールドを使う
出力はどれか。
public class Main {
public static void main(String[] args) {
System.out.println(new Child().both());
}
}
class Parent {
String v = "P";
}
class Child extends Parent {
String v = "C";
String both() { return super.v + this.v; }
}
- A
PC - B
CC - C
PP - D コンパイルエラーになる
正解と解説を見る
正解: A
- A: super.v は親の v ("P")、this.v は子の v ("C") を指すので PC です。
- B: super.v は親クラスのフィールドを指すので、子の "C" にはなりません。
- C: this.v は Child の v (子のフィールドが親のフィールドを隠している) なので "C" です。
- D: 親と子で同じ名前のフィールドを宣言でき (隠ぺい)、super.v で親の方を参照できます。
ポイント
- サブクラスで同じ名前のフィールドを宣言すると、親のフィールドは隠されます。
super.vで親の方を使えます。