关于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)?

 

    求解?

 

 

 

 

 

posted @ 2013-10-08 16:07  tongkp  Views(122)  Comments(0)    收藏  举报