一、this关键字
(1)本质
编译器在调用某个实例方法时,实际上会把当前的实例对象的引用作为第一个参数传递给方法,例如
经过编译器的处理,分别变成Animal.weight(pig,300)、Animal.weight(dog,100)。而如果想从方法内部获取当前对象的引用,就有一个专门的关键字this,表示“调用方法的那个对象”的引用(如pig和dog)。
(2)this的含义
1.在Java中,每当一个对象创建后,Java虚拟机都会给这个对象分配一个指向自身的
引用,也就是this。同时如果
对象是子类对象,则还会有一个super引用指向当前对象
的父类对象。
2.在类的方法定义中使用this关键字,表示使用该方法的对象的引用。
3.在一个类中,this可以表示该类的当前实例。
4.this是对当前类对象的引用,对象只有被实例化才存在。
(3)this主要作用
1.this调用本类中的属性,也就是类中的成员变量。
2.
this调用本类中的其他方法(如果想调用同一类中的其他方法,不必使用this,因为当前
方法的this引用会自动应用
于同一类的其他方法。)
3.
this调用本类中的其他构造方法,调用时要放在构造方法的首行(这时候this类似于一个
方法,可以传入参数。注意不能在构造
方
法以外的地方调用构造方法)。
4.使用this可以处理方法中成员变量和参数重名的问题。
5.可以作为方法返回值返回当前对象的引用。
二、super关键字
(1)本质
当我们new一个子类对象的时候,子类除了生成一个this引用指向自身,还会生成一个指向其直接父类对象的引用super。
如果子类在继承父类的非私有的法和成员变量时,没有同名的方法和变量,可以直接通过名称使用父类的方法和变量。如果子类存在与父类同名的方法和成员变量时,要想区别访问父类和自身的变量和方法,需要使用super关键字调用父类的方法和属性。
(2)含义
关键字super指向当前对象的直接父类的对象(离自己最近的一个父类)
(3)作用
1.主要存在于子类方法中,用于指向当前类的直接父类对象。
2.访问父类的属性和方法,解决当前子类的属性或方法与父类重名
3.访问父类的方法
4.访问父类的构造方法
5.作为方法返回值返回一个当前对象的直接父类对象。
三、注意事项
1.子类的构造方法必须在首行调用父类的构造方法,若没有显示调用,编译器隐式地调用
父类的无参构造方法super(),
如果有显示调用(有参或无参),则隐式调用消失。
2.this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,
其它的构造函数必然也会有super
语句的存在,所以在同一个构造函数里面有相同的语
句,就失去了语句的意义,编译器也不会通过。
3.在一个构造函数内只能调用一个构造函数。4
.在构造调用另一个构造函数,调用动作必须置于最起始的位置。 且子类构造方法
必须
要调用付父类构造方法(显示或隐式)用来初始化父类的属性。
5.不能在构造函数以外的任何函数内调用构造函数。
6.this和super只能在有对象的前提下使用,不可以在static环境中使用,static方法其实没有this引用的方法。