若是你的方法覆盖了它的一个超类的方法,你能够经过使用关键字super
来调用被重写的方法,你也能够使用super
来引用隐藏字段(尽管不鼓励隐藏字段),虑这个类,Superclass
:segmentfault
public class Superclass { public void printMethod() { System.out.println("Printed in Superclass."); } }
这是一个名为Subclass
的子类,它重写了printMethod()
:ide
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()
引用在Subclass
中声明的名称,它覆盖了Superclass
中的名称,所以,要引用从Superclass
继承的printMethod()
,Subclass
必须使用限定名,使用super
,编译和执行Subclass
将打印如下内容:函数
Printed in Superclass. Printed in Subclass
如下示例说明如何使用super
关键字来调用超类的构造函数,回想一下Bicycle
的例子,MountainBike
是Bicycle
的子类,这是MountainBike
(子类)构造函数,它调用超类构造函数,而后添加本身的初始化代码:code
public MountainBike(int startHeight, int startCadence, int startSpeed, int startGear) { super(startCadence, startSpeed, startGear); seatHeight = startHeight; }
调用超类构造函数必须是子类构造函数中的第一行。继承
调用超类构造函数的语法是:get
super();
或编译器
super(parameter list);
使用super()
,能够调用超类无参数构造函数,使用super(parameter list)
,将调用具备匹配参数列表的超类构造函数。编译
注意:若是构造函数没有显式调用超类构造函数,Java编译器会自动插入对超类的无参数构造函数的调用,若是超类没有无参数构造函数,则会出现编译时错误,Object
确实有这样的构造函数,所以若是Object
是惟一的超类,则没有问题。
若是子类构造函数显式或隐式调用其超类的构造函数,你可能会认为将调用一整个构造函数链,一直返回Object
的构造函数,事实上,状况就是这样,它被称为构造函数链,当须要很长的类层次时,你须要意识到这一点。class