super 是子類訪問父類被隱藏成員(欄位、方法、建構子)的專用引用。掌握它是理解繼承機制、避免命名衝突的關鍵。
this() 二擇一。@Override 方法)。class Father {
String v = "Father";
String x = "Father的x";
Father() { System.out.println("Father無參建構子"); }
Father(String v) { this.v = "Father帶參建構子"; }
void out() { System.out.println("Father.out()"); }
}
class Son extends Father {
String v = "Son"; // 隱藏父類 v
Son() { super(); System.out.println("Son無參建構子"); }
Son(String s) { super(s); System.out.println("Son帶參建構子"); }
void out() { System.out.println("Son.out()"); } // 覆寫
void test() {
String v = "局部v";
System.out.println(v); // 局部變數
System.out.println(this.v); // 子類欄位 Son
System.out.println(super.v); // 父類欄位 Father
System.out.println(x); // 繼承父類欄位 Father的x
System.out.println(super.x); // 同樣 Father的x
out(); // 子類 Son.out()
this.out(); // 子類 Son.out()
super.out(); // 父類 Father.out()
}
}
public class SuperDemo {
public static void main(String[] args) { new Son().test(); }
}
Father無參建構子
Son無參建構子
局部v
Son
Father
Father的x
Father的x
Son.out()
Son.out()
Father.out()
super.父類私有欄位 → 編譯錯誤 (私有不可繼承/訪問)。super.靜態方法 → 編譯錯誤 (靜態屬類,用 FatherClass.staticMethod())。super.super.x 不合法,只能跳一層。