JAVA中的this关键字

概述this关键字的作用如下:
① 强调本类中的方法
② 表示类中的属性
③ 可以使用this调用本类中的构造方法
④ 表示当前对象

进一步了解:
一,构造方法中的this关键字
构造方法是一个类的对象通过new关键字创建时自动调用的,在程序中不能向调用其他方法一样通过方法名(也就是类名)来调用。但如果一个类有多个构造方法,可以在一个构造方法中通过this(paras..)来调用其他的构造方法。
代码如图:
JAVA中的this关键字

使用this来调用其他构造方法有如下约束:
① 只能在构造方法中通过this来调用其他构造方法,普通方法中不能使用。
② 不能通过this递归调用构造方法,即不能再一个构造方法中通过this直接或间接调用该构造方法本身;
③ 通过this调用其他构造方法必须放在构造方法的第一行中执行。由于super调用父类构造方法也必须放在构造方法的第一行中执行,因此,通过this和super调用构造方法不能同时出现在同一个构造方法中,也不能在一个构造方法中多次调用不同的构造方法。
④ 在使用this调用本类其他构造方法的时候,至少有一个构造方法是不用this调用的
二,非构造方法中的this关键字
在Java中可以通过this关键字来调用本类中的成员变量和方法,其用法:
① this.xxx,访问类中的成员变量xxx;
② this.xxx(paras..) ,访问类中的成员方法xxx
③ this;表示类对象的引用;
ps:this关键字访问类的成员变量和成员方法是不受访问权限的控制,可以访问本类中所以的成员变量和方法,包括private的成员变量和方法,也可以通过this访问本类的static成员,不过由于static成员可以通过类名直接访问,如果通过this来访问会有:“The static field xxx should be accessed in a static way”的警告信息。不能在类中的static成员或static块中使用this。
三,继承关系下的this关键字
在继承关系下,父类中的this关键字并不总是表示父类中的变量和方法。无论子类是否有相同的参数的构造方法,this(paras..)访问的始终是父类中的构造方法。
无论子类是否有覆盖了该成员变量,this.xxx访问的始终是父类中的成员变量。
如果子类重写该成员方法,则this.xxx(paras..)访问的是子类的成员方法,如果子类没有重写改成员方法,则this.xxx(paras..)访问的是父类的成员方法。
例子如下:
JAVA中的this关键字
JAVA中的this关键字
四,super和this的异同
super在一个类中用来引用其父类的成员,它是在子类中访问父类成员的一个桥梁,并不是任何一个对象的引用,而this则表示当前对象的引用。在代码中 Object o = super是错误的,Object o = this是运行的。
super关键字的作用在于当子类覆盖了父类的某一个成员变量,或者重写了父类中的某一个成员方法时,还能够访问到父类中的成员变量和方法。如果子类中没有重写父类的成员变量和成员方法,则子类会继承父类的所有非private的成员变量和成员方法。这时在子类中无论通过this来访问成员和通过super访问成员,结构一致。

ps:如果将父类的一个方法定义为private访问权限,在子类中将此方法声明为default访问权限,此时,方法并没有被覆写,而是相当于在子类中又重新定义了一个新的方法出来。
代码如图:
JAVA中的this关键字
JAVA中的this关键字

请多指教!