一例,求教

ccc_moriya 2008-12-24 07:29:38
这个例子的结果为什么 是0和1呢?可以的话麻烦解释详细一点。

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+"\n"+"sup.getField()="+sup.getField());
}
}
...全文
71 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccc_moriya 2008-12-24
  • 打赏
  • 举报
回复
明白了,谢谢1,2楼的两位DX了。。。
Insmiles 2008-12-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jiangnaisong 的回复:]
答:
sup.field 这个是父类对象的field,因而是0
sup.getField()调用的是被子类重写的getField(),因而是1
记住:Super sup=new Sub()即:儿子对象当作父对象来使用时,除了重写的方法是子类对象的之外,其余的都是父对象的.
[/Quote]

定下,学习了
云上飞翔 2008-12-24
  • 打赏
  • 举报
回复
答:
sup.field 这个是父类对象的field,因而是0
sup.getField()调用的是被子类重写的getField(),因而是1
记住:Super sup=new Sub()即:儿子对象当作父对象来使用时,除了重写的方法是子类对象的之外,其余的都是父对象的.
RJCHEN1985 2008-12-24
  • 打赏
  • 举报
回复
对于变量,Super定义的引用只可以访问Super定义的变量,即Super中定义的field,即使子类有重名的成员变量,在内存中也是分开存放的,不会覆盖。所以第一个sup.field访问的是Super定义的field,0
对于方法,会处于override的情况,所以访问的是子类的getField(),为1

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧