首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

java中关于“向下转型”的疑问

2012-10-16 
java中关于“向上转型”的疑问?如下程序:class Super{public int field0public int getField(){ return fi

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)。

热点排行