scjp真题请教,

w19995 2002-01-23 01:31:48
public class Question {
String s = "Outer";
public static void main (String [] args) {
S2 s2 = new S2();
s2.display();
}
}
class S1 {
String s = "S1";
void display() {
System.out.println(s);
}
}
class S2 extends S1 {
String s = "S2";
}

输出什么?
...全文
97 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wanchengpeng 2002-01-23
s1
回复
alula 2002-01-23
在子类中没有override父类的 display()的时候,实际上在你调用
s2.display();
的时候,已经是upcast 到他的父类了。就同声明
S1 s2 = new S2();
是一样的。


我猜和 Class object 有关系。 呵呵
回复
Patrick_DK 2002-01-23
哦,是吗,我自己都忘记了,发的帖子太多:)
回复
alula 2002-01-23
"在调用 new son().bar() 的时候, Instance scope 已经转换成father了。"
就是这一句。下面有他的全部回复,帖子是:http://www.csdn.net/Expert/topic/468/468174.shtm

这个问题我也想了不少。 觉得Zhakrin的 Instance scope说法很好说明问题。


回复人: Zhakrin() (2002-1-12 1:34:35) 得0分
函数调用次序是通过V-Table来找的, 永远是调用函数Instance的Scope. 在调用wealth()时, Instance Scope 是 child. 但是如果有两个类是这样的话
public class father
{
public int foo()
{
return 1;
}

public int bar()
{
return foo() * 5;
}
}

public class son extends father
{
public int foo()
{
return 2;
}
}

在调用 new son().bar() 的时候, Instance scope 已经转换成father了。 这也就是为什么我们需要abstract这个关键字的原因: 和C++的纯虚函数一样。 至于Member variable, 则他的Scope是跟着Class Instance走的, 并没有一个VTable. 所以他在GrandFather的Scope里。
回复
alula 2002-01-23
记得一个网友提过这个问题的,他说了一个很有启发性的概念
" ... "
我找找~~
那问题是: Patrick_DK(疾风摩郎) 提出的
回复
hushuo 2002-01-23
s1
回复
ChrisZhang 2002-01-23
输出为:S1
由于类S2从由S1继承而来,所以S2继承了S1的一些公共特性和方法,所以当在程序中执行s2.display()语句语句时,S2调用其基类S1中的display()函数,鼠疫输出为S1。
回复
cainiao1975 2002-01-23
S2继承S1,那么s的值就该是S2了呀,然后new一个S2,再display,就该输出S2呀,我也不懂,好笨!!痛苦中。。
回复
ccy318 2002-01-23
在display()里的System.out.println(s); 指的是class S1 里的String s = "S1";
如果你在main里调用System.out.println("s2.s:"+s2.s.toString());则指的是class S2
里的 s(String s = "S2"; )
如果你在main里调用System.out.println("s:"+s);则指的是class Question
里的 s(String s = "Outer"; )
这是由变量的作用范围决定的
所以输出应该是 s1


回复
w19995 2002-01-23
能讲讲道理嘛?
回复
Patrick_DK 2002-01-23
S1

变量是编译期静态绑定
回复
lxf9501 2002-01-23
output : s1
回复
xiaobi_liang 2002-01-23
s1
回复
相关推荐
发帖
非技术区
创建于2007-09-28

2.3w+

社区成员

Java 非技术区
申请成为版主
帖子事件
创建了帖子
2002-01-23 01:31
社区公告
暂无公告