java小程序跪求高手指教

package WangLin;
class Father
{
public int field = 0;
public int getField()
{
return field;
}
}
class Son extends Father
{
public int field = 1;
public int getField()
{
return field;
}
}
public class Win {
static public void main(String[] args){
Father f = new Son();
Son s = new Son();
System.out.println("f.field = " + f.field + ", f.getField() = " + f.getField());
System.out.println("s.field = " + s.field + ", s.getField() = " + s.getField());
}
}
输出结果:
f.field = 0, f.getField() = 1
s.field = 1, s.getField() = 1
我认为f.field = 1,高手能讲解一下吗?

这是java典型的多态性的例子了:
你的测试满足多态的三要素:有继承,有重写,有父类引用指向子类对象。
Father f = new Son(); ---父类指向子类对象,在调用f.getField()时动态调用子类中重写的方法
所以返回值是1,而不是0。
而继承关系里,父类是看不到子类的属性的,所以父类引用f只能读取自身的field值,即0,而不是1
多态性是指方法的动态调用,属性就不行啦。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-05-05
java继承中有方法的重写,却没有属性字段的覆盖。
第2个回答  2011-05-05
这不是多态体现,因为域访问将在编译时解析,f.field = 0是没有错的,Son和Father具有两个不同的存储空间,当f指向的是Father时,调用的就是Father的域,也就是0
相似回答
大家正在搜