最近重温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)?
求解……