java在继承时,如果B类继承自A类,这时在A类调用this,其实指向的是子类。
证明如下
public class test3 extends test2{
public void find(){
System.out.println("test3 find");
}
public void load(){
System.out.println("test3 load");
System.out.println(this);
super.load();
}
public static void main(String[] args) {
test3 t3 = new test3();
t3.load();
}
}
public class test2 {
public void find(){
System.out.println("test2 find");
}
public void load(){
System.out.println("test2 load");
System.out.println(this);
this.find();
}
}
上面的代码执行结果如下
image.png
这个代表着父类调用被覆盖的方法时,其实是调用的子类方法
继承时,对于方法覆盖时,new的谁,this就指向谁,多态性决定,如果是成员变量,this,在哪个类就指向哪个类的成员变量,成员变量没有多态性
这个其实很有用处,在java里 classloader里有两个方法 findclass loadclass,其中自定义classloader时如果你重写了这两个方法,当你在调用 loadclass时,按照双亲委派机制,需要调用父类的loadclass。而父类没有加载到该类时,会调用到findclass,这时其实调用的是你自定义的findclass。
image.png
网友评论