super java_Java中的super关键字

super关键字

1、关键字super可以用于两种途径:

调用父类的方法。

调用父类的构造方法。

图片例子:

9ea8ab9930b7b671884ccdfba1ea33ea.png

2、语法格式:

super.属性名//访问父类的属性

super.方法名(参数);//调用父类的方法。

super(参数);//调用父类的构造方法。

//初始化当前对象的父类型特征

3、super能出现在实例方法和构造方法中,不能使用在静态方法中。且大部分情况下可以省略。

4、super()只能出现在构造方法第一行,通过当前的构造方法去调用、"父类"中其它的构造方法,目的是:代码复用(创建子类对象的时候,先初始化父类型特征)。

建议手动写无参构造方法

1、一个类如果没有手动提供任何构造方法,系统会默认提供一个无参数构造方法。

2、一个类如果手动提供了一个构造方法,那么无参数构造系统将不再提供。

3、重要的结论:

当一个构造方法第一行既没有this()又没有super()的话,默认会有一个super();表示通过当前子类的构造方法调用父类的无参数构造方法。所以必须保证父类的无参数构造方法是存在的。

注意:this ()和super()不能共存,它们都是只能出现在构造方法第一行。

代码例子:

package com.zyh.demoSuper;

//父类

public class Fu {

int num = 10;

public void method(){

System.out.println("父类方法");

}

}

package com.zyh.demoSuper;

//子类

public class Zi extends Fu{

int num = 20;

@Override

public void method(){

super.method();//调用了父类方法

System.out.println("子类方法");

}

public void show(){

int num = 30;

System.out.println(num);

System.out.println(this.num);

System.out.println(super.num);

}

}

package com.zyh.demoSuper;

public class test {

public static void main(String[] args) {

Zi zi = new Zi();

zi.show();

zi.method();

}

}

内存图:

63ea08810bcecf3d7516ff874ffc8e4b.png

构造方法链

1、在任何情况下,构造一个类的实例时,将会调用沿着继承链的所有父类的构造方法。当构造一个子类的对象时,子类构造方法会在完成自己的任务之前,首先调用它的父类的构,造方法。如果父类继承自其他类,那么父类构造方法又会在完成自己的任务之前,调用它自己的父类的构造方法。这个过程持续到沿着这个继承体系结构的最后一个构造方法被调用为止。

2、父类的构造方法是一定会执行的。

例一:(其中对象只创建了一个)

347a539b3c9228608f712a4c65eee42b.png

1235cdf2958bb8987c66cacca3993879.png

例二:

2ca05ec6e25446f9d0a0275f64fea5d7.png

new C();

输出结果:13654

super什么时候不能省略?

父中有,子中又有,如果想在子中访问"父的特征",super.不能省略。

super是什么?

super不是引用;super也不保存内存地址,;super也不指向任何对象。

super只是代表当前对象内部的那一块父类型的特征。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值