日期:2014-05-20  浏览次数:20792 次

java中关于“向上转型”的疑问?
如下程序:
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+
" , sup.getField()= "+sup.getField() );
}

}
结果为
sup.field= 0 , sup.getField()= 1
我弄不清为什么会是这个结果,Sub类不是把Super类中的那两个方法覆盖了吗?为何不是
sup.field= 1 , sup.getField()= 1 呢?

------解决方案--------------------
sup声明的是父类Super,所以拥有父类的属性,所以sup.field为零。
正因为子类覆盖了父类的方法,根据多态性,sup.getField()执行子类的方法,返回子类的field(=1)。