Java™ 教程(使用super关键字)

使用super关键字

访问超类成员

若是你的方法覆盖了它的一个超类的方法,你能够经过使用关键字super来调用被重写的方法,你也能够使用super来引用隐藏字段(尽管不鼓励隐藏字段),虑这个类,Superclasssegmentfault

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的例子,MountainBikeBicycle的子类,这是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


上一篇:多态性

下一篇:Object做为超类

相关文章
相关标签/搜索