这个例子的结果为什么 是0和1呢?可以的话麻烦解释详细一点。class Super{
    public int field=0;
    public int getField(){return field;}
}
class Sub extends Super{
    public int field=1;
    public int getField(){return field;}
    public int getSuperField(){return super.field;}
}public class FieldAccess{
    public static void main(String []args){
        Super sup=new Sub();
        System.out.println("sup.field="+sup.field+"\n"+"sup.getField()="+sup.getField());
    }
}

解决方案 »

  1.   

    对于变量,Super定义的引用只可以访问Super定义的变量,即Super中定义的field,即使子类有重名的成员变量,在内存中也是分开存放的,不会覆盖。所以第一个sup.field访问的是Super定义的field,0
    对于方法,会处于override的情况,所以访问的是子类的getField(),为1
      

  2.   

    答:
    sup.field 这个是父类对象的field,因而是0
    sup.getField()调用的是被子类重写的getField(),因而是1
    记住:Super sup=new Sub()即:儿子对象当作父对象来使用时,除了重写的方法是子类对象的之外,其余的都是父对象的.