共计 1276 个字符,预计需要花费 4 分钟才能阅读完成。
使用 super 关键字
访问超类成员
如果你的方法覆盖了它的一个超类的方法,你可以通过使用关键字 super 来调用被重写的方法,你也可以使用 super 来引用隐藏字段(尽管不鼓励隐藏字段),虑这个类,Superclass:
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() 引用在 Subclass 中声明的名称,它覆盖了 Superclass 中的名称,因此,要引用从 Superclass 继承的 printMethod(),Subclass 必须使用限定名,使用 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();
或
super(parameter list);
使用 super(),可以调用超类无参数构造函数,使用 super(parameter list),将调用具有匹配参数列表的超类构造函数。
注意:如果构造函数没有显式调用超类构造函数,Java 编译器会自动插入对超类的无参数构造函数的调用,如果超类没有无参数构造函数,则会出现编译时错误,Object 确实有这样的构造函数,因此如果 Object 是唯一的超类,则没有问题。
如果子类构造函数显式或隐式调用其超类的构造函数,你可能会认为将调用一整个构造函数链,一直返回 Object 的构造函数,事实上,情况就是这样,它被称为构造函数链,当需要很长的类层次时,你需要意识到这一点。
上一篇:多态性
下一篇:Object 作为超类