1.代码如下
父类代码:
public class A {
public void a(){
B b=(B)this;
System.out.println(b.getNum());
System.out.println("A.this.hashCode="+this.hashCode());
}
}
子类代码:
public class B extends A {
public int num = 3;
public int getNum() {
return num;
}
public void test() {
super.a();
}
public static void main(String[] args) {
B b=new B();
b.test();
System.out.println("b.hashCode="+b.hashCode());
}
}
2.执行结果
3
A.this.hashCode=412537538
b.hashCode=412537538
个人猜测在调用方法时,之前有看到过相关子类说,每个方法都隐式
传了当前对象的this变量,因为子类是通过super调父类方法的,
所以父类方法中的这个this应该是子类实例对象,而且把各自对象的
hashCode打印出来,是一样的,不知道这样猜测对不?
4.这个问题在看jdk内置观察者模式框架代码时,发现有个困惑的代码,最后一行的this对象,源代码如下:
public void notifyObservers(Object arg) {
Object[] arrLocal;
synchronized (this) {
if (!changed)
return;
arrLocal = obs.toArray();
clearChanged();
}
for (int i = arrLocal.length - 1; i >= 0; i--)
((Observer) arrLocal[i]).update(this, arg);
}
我们使用时,一般自定义主题类均继承java.util.Observable,观察者实现java.util.Observer,需要将update方法中的Observable对象变量,强转成自定义主题类实例,调用主题类的相关方法。
喵喵时光机
手掌心
慕村9548890
慕丝7291255
相关分类