看以下例子:
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.
本文通过一个Java示例代码展示了在子类中如何处理从父类继承来的字段,并解释了在子类对象被当作父类类型引用时字段访问的具体行为。
143

被折叠的 条评论
为什么被折叠?



