Java之继承的super关键字

一:java继承里面的super关键字

  • 一个引用变量,用于引用父类对象
  • 父类和子类都具有相同的命名方法,要调用父类方法时使用
  • 父类和子类都具有相同的命名属性,要调用父类中的属性时使用
  • super也是父类的构造函数,格式 super(参数)
    • 注意:调用super() 必须是类构造函数中的第一条语句,否则编译不通过
    • 每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错
  • this()和super()都指的是对象,均不可以在static环境中使用

二:构造函数里面的 super和this

  • this()和super()都指的是对象,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
  • this 和super在构造函数中只能有一个,且都必须是构造函数当中的第一行
  • 当父类的构造函数是无参构造函数时,在子类的构造函数中,不用显式super()去调用父类的构造函数,
  • 当父类的构造函数是有参构造函数时,如果子类的构造函数中不写super()进行调用父类的构造函数,编译器会报错

三:java继承后类的初始化顺序

静态代码块、非静态代码、父类/子类无参构造方法、父类/子类的一般方法
Father.java

package chapter6;

public class Father {

    static {
        System.out.println("父类静态代码块");
    }

    private int age;

    public Father(){
        System.out.println("father 无参构造函数");
    }

    public Father(int age){
        this.age = age;
        System.out.println("father 有参构造函数");
    }

    public void sleep(){
        System.out.println("father sleep");
    }
}

Child.java

package chapter6;

public class Child extends Father {
    static {
        System.out.println("子类静态代码块");
    }

    private int age;

    public Child() {
        System.out.println("child constructor");
    }

    public Child(int age) {
        super();

    }

    public void sleep() {
        System.out.println("child sleep");
    }
}

ExtendDemo.java

package chapter6;

public class ExtendDemo {
    public static void main(String[] args) {
       Child child = new Child();
       child.sleep();
    }

}
//运行结果
// 父类静态代码块
// 子类静态代码块
// father 无参构造函数
// child constructor
// child sleep
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

竹意雅韵(马)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值