原文出自 http://www.cnblogs.com/ggjucheng/archive/2012/11/26/2789722.html
訪問父類的成員
如果你覆蓋了父類的方法,你可以通過super調用父類被覆蓋的方法,也可以通過super引用被隱藏的變數(儘管隱藏變數是不推薦的方式).
假設父類是這樣的:
public class Superclass { public void printMethod() { System.out.println("Printed in Superclass."); }}
這裡有一個子類Subclass,它會覆蓋方法printMethod():
public class Subclass extends Superclass { // overrides printMethod in Superclass public void printMethod() { super.printMethod(); System.out.println("Printed in Subclass"); } public static void main(String[] args) { Subclass s = new Subclass(); s.printMethod(); }}
在Subclass的方法printMethod(),覆蓋了父類的printMethod()方法,如果要引用父類的printMethod()方法,必須使用一個被修飾的名字,如上使用super.編譯並執行Subclass,輸出如下:
Printed in Superclass.Printed in Subclass
子類構造方法
下面的例子詳解如何使用super關鍵字調用父類的構造方法,回顧之前Bicycle的例子,MountainBike是Bicycle的子類,這裡是MountainBike(子類)構造方法調用父類構造方法,並添加自己的初始化代碼的例子:
public MountainBike(int startHeight, int startCadence, int startSpeed, int startGear) { super(startCadence, startSpeed, startGear); seatHeight = startHeight;}
調用父類的構造方法,必須位於子類的構造方法的第一行.
調用父類的構造方法的文法如下:
super(); or:super(parameter list);
super()是調用父類的無參構造方法, super(parameter list)是調用父類對應的參數的構造方法。
注意:如果子類不顯式調用父類的構造方法,java編譯器會自動插入一條調用父類的無參構造方法的指令,如果父類沒有無參構造方法,會出現一個編譯時間異常.Object沒有這個問題,如果object是唯一的父類,就不存在問題。
如果子類的構造方法調用父類的構造方法,不管顯式還是隱式,你也許會思考整個構造方法經過所有對象的鏈路.事實上是存在的,它稱之為構造方法鏈,而且你必須意識到,有一個同樣的鏈路從最頂層的類返回。