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";
}

输出什么?
...全文
137 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
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

23,409

社区成员

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

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