java程序输出结果

liublog 2005-06-29 02:15:18
class exam{
public static void main(String[] args){
Y v2=new Y();
X v3=(X)v2;
System.out.println(v3.x);
System.out.println(v3.retv());
}
}
class X{
int x=10;
int retv(){
return x;
}
}
class Y extends X{
int y=20;
int x=30;
int retv(){
return x;
}
}
----------------------------------------------
输出结果:
10
30


为什么是这个结果?
怎么不是30 30 啊?

...全文
190 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
数据娃掘 2005-09-10
  • 打赏
  • 举报
回复
v3.x指向父类的x地址,v3.retv()指向子类的函数地址并且返回子类的变量
liublog 2005-09-10
  • 打赏
  • 举报
回复
谢谢大家
yueyueniao1 2005-06-29
  • 打赏
  • 举报
回复
class exam{
public static void main(String[] args){
Y v2=new Y();
X v3=(X)v2;
System.out.println(v3.x);
System.out.println(v3.retvxx());
}
}
class X{
int x=10;
int retv(){
return x;
}
}
class Y extends X{
int y=20;
int x=30;
int retvxx(){
return x;
}
}

试一试 你就什么都明白了
JMagic 2005-06-29
  • 打赏
  • 举报
回复
v3.x指向父类的x地址,v3.retv()指向子类的函数地址并且返回子类的变量,
可以把类Y里面的变量x改称其他名字来考虑
yzs10 2005-06-29
  • 打赏
  • 举报
回复
这个不是什么重载吧,你只是把父类的x拿来
重新给它赋值了啊,如果你不调用子类的retv()方法,x的值肯定还是10啊
在你第一个例子中,子类中的x有自己的定义啊,
和父类中的x是两个不同的变量啊,当然不能重载了哦,它们应该有不同的内存地址的啊
rower203 2005-06-29
  • 打赏
  • 举报
回复
成员变量不支持重载?
Why the result is (30,30) in my case?
bevin1010 2005-06-29
  • 打赏
  • 举报
回复
free_card(痛并快乐着) 讲得很清楚啊!成员变量不支持重载,而方法可以!
这个例子好像在thinking in java上面讲过!
rower203 2005-06-29
  • 打赏
  • 举报
回复
试试这个没?
class exam{
public static void main(String[] args){
Y v2=new Y();
X v3=(X)v2;
System.out.println(v3.retv());
System.out.println(v3.x);

}
}
class X{
int x=10;
int retv(){
return x;
}
}
class Y extends X{
int y=20;

int retv(){
x=30;
return x;
}
}


输出结果:
30
30
kingfish 2005-06-29
  • 打赏
  • 举报
回复
v3.x v3类型是X,所以是X.x
v2.x v2类型是Y,所以是Y.x (JVM中指令为getfield)

v3.retv() //根据v3的真实类型调用方法,也就new 对象类型()时的“对象类型”,也就Y;
(JVM中指令为invokevirtual)
free_card 2005-06-29
  • 打赏
  • 举报
回复
函数可重载,变量不支持
mofeir 2005-06-29
  • 打赏
  • 举报
回复
JVM里每个类都有自己的类存储形式,在类加载的时候已经固定了的。
jvm处理的时候,每个类都有自己的常量池。

呵呵。就是这么一回事情而已。

而方法也有方法存放的表,子类重载是覆盖父类方法的话,该方法在该表中还是原先位置,只是把引用空间指向了新得函数体而已。

62,614

社区成员

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

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