this
引子
- this 指谁?
- 谁调用的这个方法谁就是this
- this是调用此方法对象的引用
- 一个类当中它所有的成员想要被使用,就一定要有对象的调用
- 那为什么在本类中调用其他的方法却不需要创建对象?
正文
- this用来区别局部变量和成员变量重名
- 当方法中的局部变量和成员变量重名的时候会优先选择局部变量,要访问本类中的成员变量则需要this.成员变量的形式
- 调用本类当中的方法
- 在本类中我们可以通过创建对象或者设成静态来调用成员,除此之外我们还可以用this来调用成员,但是在本类中这个this一般都省略
- 调用其他构造函数
- this(参数)只能写在第一行
Person(String name){this.name = name;}Person(String name , int age){this(name);//里面传的是局部变量的namethis.age = age;}
- this(参数)只能写在第一行
super
引子
- super可以理解为是指向自己父类对象的一个指针,而这个父类指的是离自己最近的一个父类。
- 每当你new一个子类对象的时候,子类对象都隐式内置了一个父类对象。
所以说,为了那个内置的父类对象,也需要进行初始化
- 所以假如一个父类A有两个子类 B1, B2,如果子类 B1 创建对象利用super对父类进行修改的内容和 B2 是不共享的,B1,B2 在创建自己对象时都分别内置了自己的一个父类对象
子类中若有多个构造函数,每个函数都有super,创建对象时保证父类能够被初始化
正文
super用来区别子类成员变量和父类成员变量
- 当子父类成员变量重名时,super调用父类成员变量,如果没用则是使用子类自己的
- 如果创建的是父类的对象则是用父类自己的
- 当创建子类对象,该变量在子类中没有,则在父类中寻找
- 当子父类成员变量重名时,super调用父类成员变量,如果没用则是使用子类自己的
- super用来区别子类成员方法和父类成员方法
- 当一个类继承于另一个类,子类中没有父类的方法时。用子类的对象调用方法时,会首先在子类中查找,如果子类中没有改方法,再到父类中查找。
- 当一个方法只在父类中定义时,调用该方法时会使用父类中的属性。
如果该方法中又调用了其他方法,那么还是按照之前的顺序,先在子类中查找,再在父类中查找。
- super访问父类的构造方法
- 在子类的构造方法里面调用super,如果父类中含有无参构造方法,子类构造方法会隐式调用了一句super(),因此对于无参构造函数,super()可写,可不写,
- 如果父类里面没有定义参数为空的构造函数,那么必须在子类的构造函数的第一行显示的调用super(参数);语句调用父类当中其它的构造函数
- this和super不能同时使用
- this和super都必须写在第一行
- 使用了 this 就到他调用的构造函数中使用super
