关于属性的获取
public class Test {
public static void main(String[] args) {
T t = new T2();
System.out.println(t.i);
System.out.println(t.getI());
}
public static class T {
public int i = 1;
public int getI() {
return this.i;
}
}
public static class T2 extends T {
public int i = 2;
public int getI() {
return this.i;
}
}
}
目前我只知道方法的调用会根据对象从最终子类对象依次往父类查找,找到即调用。但是属性呢,从上面的输出看与方法不同,输出1,即T中的属性,如果将T t = new T2();改成T2 t = new T2();那么会打印2,我的猜测是根据引用类型从最终子类开始依次查找父类,找到该引用类型对应的对象,然后根据属性的偏移量获取值。
上面是我的猜测,不知道有没有大牛能指导下。此过程具体jvm是如何做的?