super

super概述

  1. super能出现在实例方法和构造方法中

  2. super语法:super. super( )

  3. super不能使用在静态方法中

  4. super.大部分情况可以省略

  • 什么时候不能省略呢?
    当访问的属性是父类型属性的时候不能省。例如,父类子类都有一个name属性,父.name=张三,子.name=张四 。那么super.name=张三,name=张四,带上super就是父类的属性,不带super就是子类 的属性
  1. super( )只能出现在构造方法的第一行,通过当前方法调用父类其他构造方法,目的是创建子类对象的时候先初始化父类型特征。

class A{
    //A的无参构造方法
    public A(){
      System.out.println("A执行!");
    }
}

class B extends A{
          //子类方法第一行会默认super();调用父类的无参构造方法
  public B(){
    System.out.println("B执行!");
  }
}
// main方法中new一个B对象,程序执行结果为:A执行!
//                                         B执行!

重要结论:
当一个构造方法第一行既没有this( ) 又没有 super( )时,默认会有一个super( ),表示通过当前的子类构造方法调用父类的无参构造方法,如果父类没有无参构造方法,则会报错,所以建议把无参构造方法手动写出来。


super();内存图

super

super(实参);到底是干啥的???--------初始化父类型特征

一个子类创建对象,这个子类对象必然会包含父类的特征,父亲的特征如何传给儿子呢?

答案是在子类的构造方法中调用父类的构造方法(构造方法的作用-->初始化类的特征属性)完成对父类特征的初始化,从而将父类的特征初始化给了子类对象。

这就是为什么在构造方法的第一行会默认有super( )的原因,因为这个类在调用构造方法创建对象的时候,需要将其父类的特征继承过来。

  • super关键字,不是引用,不保存任何内存地址,也不指向任何对象,super代表的就是当前对象身上那部分父类型特征

总结

需要在子类构造方法中调用父类构造方法就用super();
需要访问父类的属性,就用super.父类属性。

上一篇:泛型的用法<? extends A>,<? super A>


下一篇:setModel 的核心逻辑