简而言之,this是指向当前对象的引用,而super是指向当前对象父类的引用!
一、this指针
this指针总结起来有如下两点:
1、当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this。并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。
2、Java关键字this只能用于方法方法体内。
举例说明:
public class Base {
int id;
public Base() {
this(0); // 在一个构造函数中调用另一个构造函数
}
public Base(int id) {
this.id = id; // 区分和类属性重名的变量
}
public Object Base() {
return this; // 返回自身的引用
}
public void pri() {
System.out.println(“Base”); // 返回自身的引用
}
}
由上一个例子可以看出,this指针可以使用到的三个地方:
1、 在一个构造函数中调用另一个构造函数;
2、区分和类属性重名的变量;
3、获得对象自身的引用;
this指针在方法调用时的用处
假如一个Dog类具有bite(Person p)的方法,
Dog a = new Dog();
Dog b = new Dog();
a.bite(p1);
b.bite(p2);
bite方法对于Dog类来说是唯一的,那么如何区分是那个对象调用的bite方法呢?
其实对于编译器来说会把a.bite(p1)转化为bite(a, p1),把b.bite(p2)转化为bite(b, p2),那么分别接受对象a和对象b的就是this指针,通过this指针来区分不同的内存块。
二、super指针
super关键字的作用是在子类中被屏蔽的直接父类的方法和属性;
举例说明:
public class Inherit extends Base{
int id;
public Inherit(int id) {
super(1); // 调用父类的构造方法
this.id = 2;
}
public void pri() {
System.out.println(super.id+” “+id); // 调用被屏蔽的父类属性
super.pri(); // 调用被屏蔽的父类方法
System.out.println(“Inherit”);
}
public static void main(String[] args) {
Inherit in = new Inherit(2);
in.pri();
}
}
由上例可以看出,super指针的使用也是主要有三点:
1、在构造函数中调用父类的构造方法;
2、访问被屏蔽的父类属性;
3、访问被屏蔽的父类方法;