看以下例子:
package extendsTest;
/**
*
* @author xiaoyu
*
*/
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 TestExtendsField {
public static void main(String args[]){
Super super1=new Sub();
System.out.println(super1.field+";"+super1.getField()+";");
Sub sub=new Sub();
System.out.println(sub.field+";"+sub.getField()+";"+sub.getSuperField());
}
}
输出结果:
0;1;
1;1;0
结果分析:当Sub转型为Super引用时,任何域访问操作都将由编译器解析,因此不再是多态的。本例中,
为Super.field和Sub.field分配了不同的存储空间。
这样,Sub实际上包含了两个field;它自己的和它从Super处得到的,然而在Sub中的field时所产生的默认域并非Super.field。
因此为了得到Super.field,必须显示的指明super.field.