Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
请参阅Java语言更改以了解Java SE 9及后续版本中更新的语言功能的摘要。
请参阅JDK发布说明以获取有关所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息。
如果你的方法覆盖了父类的方法,你可以通过使用关键字super
来调用被覆盖的方法。你也可以使用super
来引用隐藏的字段(虽然隐藏字段是不推荐的)。考虑这个类Superclass
:
public class Superclass { public void printMethod() { System.out.println("在父类中打印。"); } }
这是一个子类Subclass
,它覆盖了printMethod()
:
public class Subclass extends Superclass { // 覆盖了Superclass中的printMethod public void printMethod() { super.printMethod(); System.out.println("在子类中打印。"); } public static void main(String[] args) { Subclass s = new Subclass(); s.printMethod(); } }
在Subclass
中,简单名称printMethod()
指的是在Subclass
中声明的方法,它覆盖了Superclass
中的方法。因此,为了引用从Superclass
继承的printMethod()
,Subclass
必须使用限定名称,如示例中所示使用super
。编译和执行Subclass
会打印出以下结果:
在父类中打印。 在子类中打印。
下面的示例说明了如何使用super
关键字来调用父类的构造方法。回想一下Bicycle
示例,MountainBike
是Bicycle
的子类。下面是MountainBike
(子类)的构造方法,它调用了父类的构造方法,然后添加了自己的初始化代码:
public MountainBike(int startHeight, int startCadence, int startSpeed, int startGear) { super(startCadence, startSpeed, startGear); seatHeight = startHeight; }
调用父类构造方法必须是子类构造方法中的第一行。
调用父类构造方法的语法是
super();
super(参数列表);
使用super()
会调用父类的无参构造方法。使用super(参数列表)
会调用父类具有相匹配参数列表的构造方法。
Object
有这样的构造方法,所以如果Object
是唯一的父类,就没有问题。
如果一个子类构造方法显式或隐式地调用了其父类的构造方法,你可能会认为会有一整条构造方法链被调用,一直回溯到Object
的构造方法。事实上,确实是这样的。这被称为构造方法链,在存在长链的类衍生时,你需要注意它。