1.super關鍵字可以在子類的構造方法中顯示地調用父類的構造方法,super()必須為子類構造函數中的第一行。
2.super可以用來訪問父類的成員方法或變量,當子類成員變量或方法與父類有相同的名字時也會覆蓋父類的成員變量或方法,這個時候要想訪問父類的成員變量或方法只能通過super關鍵字來訪問,子類方法中的super.方法名()不需要位於第一行。
package test; class FatherClass { public int value; public void f() { value=100; System.out.println("父類的value屬性值="+value); } public FatherClass(){ System.out.println("FatherClass constructor"); } } class ChildClass extends FatherClass { /** * 子類除了繼承父類所具有的value屬性外,自己又另外聲明了一個value屬性, * 也就是說,此時的子類擁有兩個value屬性。 */ public ChildClass(){ super(); System.out.println("ChildClass constructor"); } public int value; /** * 在子類ChildClass里面重寫了從父類繼承下來的f()方法里面的實現,即重寫了f()方法的方法體。 */ public void f() { //使用super作為父類對象的引用對象來調用父類對象里面的f()方法 //這個value是子類自己定義的那個value,不是從父類繼承下來的那個value value=200; super.f(); //父類的value屬性值=100 System.out.println("子類的value屬性值="+value); //子類的value屬性值=200 //打印出來的是子類自定義的那個value的值,這個值是200 System.out.println(value); //200 /** * 打印出來的是父類里面的value值,由於子類在重寫從父類繼承下來的f()方法時, * 第一句話“super.f();”是讓父類對象的引用對象調用父類對象的f()方法, * 即相當於是這個父類對象自己調用f()方法去改變自己的value屬性的值,由0變了100。 * 所以這里打印出來的value值是100。 */ System.out.println(super.value); //100 } } public class SuperKeyTest { public static void main(String[] args) { ChildClass cc = new ChildClass(); cc.f(); } }