this

引子

  • this 指谁?
    • 谁调用的这个方法谁就是this
    • this是调用此方法对象的引用
  • 一个类当中它所有的成员想要被使用,就一定要有对象的调用
    • 那为什么在本类中调用其他的方法却不需要创建对象?

正文

  • this用来区别局部变量和成员变量重名
    • 当方法中的局部变量和成员变量重名的时候会优先选择局部变量,要访问本类中的成员变量则需要this.成员变量的形式
  • 调用本类当中的方法
    • 在本类中我们可以通过创建对象或者设成静态来调用成员,除此之外我们还可以用this来调用成员,但是在本类中这个this一般都省略
  • 调用其他构造函数
    • this(参数)只能写在第一行
      1. Person(String name){
      2. this.name = name;
      3. }
      4. Person(String name , int age){
      5. this(name);//里面传的是局部变量的name
      6. this.age = age;
      7. }

super

引子

  • super可以理解为是指向自己父类对象的一个指针,而这个父类指的是离自己最近的一个父类。
    • 每当你new一个子类对象的时候,子类对象都隐式内置了一个父类对象。

所以说,为了那个内置的父类对象,也需要进行初始化

  1. - 所以假如一个父类A有两个子类 B1, B2,如果子类 B1 创建对象利用super对父类进行修改的内容和 B2 是不共享的,B1,B2 在创建自己对象时都分别内置了自己的一个父类对象
  • 子类中若有多个构造函数,每个函数都有super,创建对象时保证父类能够被初始化

    正文

  • super用来区别子类成员变量和父类成员变量

    • 当子父类成员变量重名时,super调用父类成员变量,如果没用则是使用子类自己的
      • 如果创建的是父类的对象则是用父类自己的
    • 当创建子类对象,该变量在子类中没有,则在父类中寻找
  • super用来区别子类成员方法和父类成员方法
    • 当一个类继承于另一个类,子类中没有父类的方法时。用子类的对象调用方法时,会首先在子类中查找,如果子类中没有改方法,再到父类中查找。
    • 当一个方法只在父类中定义时,调用该方法时会使用父类中的属性。

如果该方法中又调用了其他方法,那么还是按照之前的顺序,先在子类中查找,再在父类中查找。

  • super访问父类的构造方法
    • 在子类的构造方法里面调用super,如果父类中含有无参构造方法,子类构造方法会隐式调用了一句super(),因此对于无参构造函数,super()可写,可不写,
    • 如果父类里面没有定义参数为空的构造函数,那么必须在子类的构造函数的第一行显示的调用super(参数);语句调用父类当中其它的构造函数
  • this和super不能同时使用
    • this和super都必须写在第一行
    • 使用了 this 就到他调用的构造函数中使用super