java super的使用(翻译自Java Tutorials)

原文出自 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是唯一的父类,就不存在问题。

如果子类的构造方法调用父类的构造方法,不管显式还是隐式,你也许会思考整个构造方法经过所有对象的链路.事实上是存在的,它称之为构造方法链,而且你必须意识到,有一个同样的链路从最顶层的类返回。

转载于:https://www.cnblogs.com/ggjucheng/archive/2012/11/26/2789722.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值