this与super的区别

1.this与super继承关系

当子类创建对象后,该子类对象本身可以使用this来指代,而该对象当中的父类对象空间可以使用super来指代
示例:
this与super的区别
所以继承关系图:
this与super的区别

2.this与super调用普通成员与构造方法

  • 调用普通成员
    • this.成员变量 可以访问本类对象的成员变量
    • super.成员变量 可以访问父类对象的非私有成员变量
    • this.成员方法() 可以访问本类对象的成员方法
    • super.成员方法() 可以访问父类对象的成员方法
      以上访问符合就近原则,即访问顺序:局部>>成员>>父类成员
      建议:子类和父类的成员变量尽量不要重名
  • 调用构造方法
    • this(其他参数) 可以访问本类其他的构造方法
    • super(其他参数) 可以访问父类其他的构造方法
  • 默认子类调用父类构造方法
    • 子类的每个构造方法均有默认的super(),调用父类的空参构造,手动调用父类构造会覆盖默认的super()
    • 构造方法只能在构造方法中调用,一定不能在普通方法里调用
    • 在构造方法当中不能在调用父类构造方法的同时调用本类的其他构造方法
    • 在构造方法中调用构造方法,必须放在第一行

从本质上来说,this是一个指向本对象的指针,super是一个Java关键字