5.2.5、super关键字的使用

本文深入讲解Java中的super关键字,包括如何使用super访问父类成员,如方法和字段,以及在子类构造器中调用父类构造器的过程。通过具体示例演示了super在Java继承中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇Java教程基于JDK1.8。教程中的示例和实践不会使用未来发行版中的优化建议。
5.2.5、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()方法,重写了父类SuperClass中的方法。为了访问父类中的printMethod()方法,子类SubClass必须使用super关键字。编译并执行SubClass输出如下:

Printed in Superclass.
Printed in Subclass
子类构造器

下面的示例说明了如何使用super关键字调用父类构造器。前面的例子中,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) ,将调用匹配到参数列表的构造器。


注意:如果构造器没有显示调用父类构造器,编译器会自动插入一个父类无参构造器的调用。如果父类没有无参构造器,那么就会编译错误。Object 类有无参构造器,所以如果Object 类 是唯一的父类,就不会有问题。


如果子类构造器调用了父类构造器,无论显示还是隐式,你应该知晓有整个的构造器链调用,直到Object的构造器为止。事实上,这被称为构造器链 ,当类有很长的层级关系时,尤其要注意这一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值