天天看点

Java中this和super关键字的深入理解一、this关键字二、super关键字三、注意事项

一、this关键字

(1)本质 编译器在调用某个实例方法时,实际上会把当前的实例对象的引用作为第一个参数传递给方法,例如

Java中this和super关键字的深入理解一、this关键字二、super关键字三、注意事项

经过编译器的处理,分别变成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引用的方法。