关于java多态的问题
最近重温Java编程思想,看到一段代码,运行后的结果有点疑惑,贴出来让大家给分析一下:
有一个Super类,如下:
1 package com.test2; 2 3 public class Super { 4 public int field = 0; 5 6 public int getField() { 7 return field; 8 } 9 }
一个导出类,继承自Super.java,如下:
1 package com.test2; 2 3 public class Sub extends Super { 4 public int field = 1; 5 6 public int getField(){ 7 return field; 8 } 9 10 public int getSuperField(){ 11 return super.field; 12 } 13 }
一个主方法,代码如下:
1 package com.test2; 2 3 public class FieldAccess { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 Super sup = new Sub(); 10 System.out.println("sup.field:" + sup.field + ", sup.getField():" 11 + sup.getField()); 12 13 Sub sub = new Sub(); 14 System.out.println("sub.field:" + sub.field + ", sub.getField():" 15 + sub.getField() + ", sub.getSuperField():" 16 + sub.getSuperField()); 17 } 18 19 }
运行的结果:
1 sup.field:0, sup.getField():1 2 sub.field:1, sub.getField():1, sub.getSuperField():0
主要的疑惑就在结果的第1行,为什么sup.field取得的是父类的值(0),
而sup.getField()却调的是子类的方法(返回的结果为1)?
求解?

浙公网安备 33010602011771号