最近重温Java编程思想,看到一段代码,运行后的结果有点疑惑,贴出来让大家给分析一下:

有一个Super类,如下:

package com.test2;
public class Super {
public int field = 0;
public int getField() {
return field;
}
}

一个导出类,继承自Super.java,如下:

package com.test2;
public class Sub extends Super {
public int field = 1;
public int getField(){
return field;
}
public int getSuperField(){
return super.field;
}
}

一个主方法,代码如下:

package com.test2;
public class FieldAccess {
/**
* @param args
*/
public static void main(String[] args) {
Super sup = new Sub();
System.out.println("sup.field:" + sup.field + ", sup.getField():"
+ sup.getField());
Sub sub = new Sub();
System.out.println("sub.field:" + sub.field + ", sub.getField():"
+ sub.getField() + ", sub.getSuperField():"
+ sub.getSuperField());
}
}

运行的结果:

sup.field:0, sup.getField():1
sub.field:1, sub.getField():1, sub.getSuperField():0

主要的疑惑就在结果的第1行,为什么sup.field取得的是父类的值(0),而sup.getField()却调的是子类的方法(返回的结果为1)?

求解……