Java学习之面向对象三大特征(继承性 3)

super的用法

在上一篇中介绍了继承关系中子类的方法重写的实现过程(Java学习之面向对象三大特征(继承性 2)
在方法重写过程中,子类可以实现属于自己的、与父类同名的方法,而覆盖了从父类那里继承来的方法。

但是,如果子类覆盖重写了父类的方法后,子类对象又想访问父类的方法了,怎么办?
这个问题就是本篇的重点——super的用法。

1. 在子类的成员方法中,super可以访问父类的成员变量。

下面是子类(Teacher类)中的重写方法的super用法:

    @Override
    public void study() {
        System.out.println(super.name);
    }
    public static void main(String[] args) {
        Teacher teacher = new Teacher();
        teacher.study();
        }

在这里插入图片描述
主函数中是子类的对象访问子类的重写方法,但返回的是父类的成员变量。(此处关于父类、子类的成员变量和成员方法的定义请点这里Java学习之面向对象三大特征(继承性 1)

2. 在子类的成员方法中,访问父类的成员方法。

下面同样是子类(Teacher类)中的重写方法的super用法:

    @Override
    public void study() {
        super.study();
    }

在这里插入图片描述
主函数内容和上面一样,运行结果如图,子类对象调用子类方法,但返回的是父类成员方法的内容。因为super.study中的study实际上是父类的成员方法study。

3. 在子类的构造方法中,super可以访问父类的构造方法。

    public Person() {   ///父类构造方法
        System.out.println("父类的构造方法");
    }
    public Teacher() {   ///子类构造方法
    System.out.println("子类构造方法");
    }

在这里插入图片描述
如上图所示,主函数和第2点的主函数一样,只是在父类和子类的构造方法中添加了一句话。

  • 首先可以看出两条构造方法的运行结果在父类成员方法的上面,所以可以得出一条结论:构造方法永远在其他成员方法之前执行。

  • 其次,可能会有疑问,这里并没有用到super,为什么会访问到父类的构造方法。这里是因为在子类的构造方法中如果没有明确写出super,则编译器会自动生成一个默认的super(),而且默认是无参数的。所以这里会调用到父类的无参构造方法。

  • 而且,还可以注意到,父类的构造方法在子类的构造方法上面,这不是偶然。这说明编译器自动生成的super()在子类构造方法体的第一句。所以super()语句必须写在构造方法的第一句,否则会报错。

  • 那么怎样来调用父类的有参构造方法呢?没错,只需自己写上super(参数列表),而不用编译器自动生成的。

    public Person(String who){
        System.out.println(who+"实现了父类的构造方法");
    }
    public Teacher() {
        super("哪吒");
        System.out.println("子类构造方法");
    }

这里实现了一个父类的有参构造方法,并在子类的构造方法中用super(参数列表)调用它。
在这里插入图片描述
从运行结果可以看出,通过在子类的构造方法中使用super(参数列表)是可以实现对父类有参构造方法的访问的。

仔细观察可以发现,虽然调用了父类的有参构造方法,但是父类的无参构造方法却没有运行。这是为什么呢?
其实上面已经给出答案了,上面讲到super()必须放在子类构造方法的第一句!那么要想同时访问父类的有参构造方法和无参构造方法,就必须得两句super(),但是一个放在第一句,则必然会有另一个处于第二句,这样就会报错。
所以可以得出结论:子类构造方法中只能使用一次super(参数列表)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值