JAVA中this/super用法

this的含义和用法

Java关键字this只能用于方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this。并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。

一些需要注意的地方如下:

(1)通过this调用本类中另一个构造方法,用法是this(参数列表),这个仅仅在类的构造方法中可以用,并且只能放在类的构造方法的方法体的第一句。别的地方不能用。

(2)方法参数或者方法中的局部变量和成员变量同名的情况下,成员变量被屏蔽,此时要访问成员变量则需要用“this.变量名”的方式来引用变量。但是,在没有同名的情况,可以直接用成员变量的名字,而不用this,用了也是正确的(看起来更加的直观)。

(3)我们也可以是用“this.成员方法名”来调用对象的成员方法,不过没有必要这要做哦,直接调用“成员方法名”即可。

总之,this代表的是指向对象本身的一个指针。

super的含义和用法

super和this作用类似,不过super是用在子类中,目的是访问直接父类中被屏蔽的成员,注意是直接父类(就是类之上最近的超类)。

一些需要注意的地方如下:

(1)在子类的构造方法中要调用父类的构造函数,用“super(参数列表)”的方式调用,参数不是必须的。注意“super(参数列表)”这条语句只能放在子类构造方法的方法体的第一句。

(2)当子类方法中的局部变量或者子类的成员变量与父类的成员变量同名时,也就是子类局部变量或者子类的成员变量覆盖了父类的成员变量时,用“super.成员变量”引用父类的成员变量。当然父类的成员变量没有覆盖,也可以用“super.成员变量名”来引用父类的成员变量,但是是不必要的。因为在调用这个方法的时候,会先去看一下这个类里面有没有这个方法,如果本类中没有这个方法,那么系统就会自动去这个类的父类里面查找是否有这个方法。

(3)如果子类重写了父类的某一个方法,也就是子类和父类有相同的方法定义,但是有不同的方法体。此时,我们需要通过“super.成员方法名”来调用父类里面的这个方法。

总之,super代表的是指向直接父类对象的一个指针。