CNET中国旗舰网站

ZDNet China | CNET科技资讯网 | 政府采购 | 行业网站联盟





 
标题: [原创] java陷阱一
mesum
超级会员
Rank: 4



UID 321006
精华 0
积分 1811
帖子 73
威望 722
ZD币 160 元
阅读权限 90
注册 2008-4-21
状态 离线
  楼主
发表于 2008-4-28 20:32  资料  个人空间  短消息  加为好友 
开发者在线

java陷阱一

java陷阱一

我的网址:www.javaedu.com.cn

QQ:2535279
QQ:841403798


class Base{
int i;
Base(){
add(1);
}
void add(int v){
i += v;
}
void print(){
System.out.println(i);
}
}

class Extension extends Base{
Extension(){
add(2);
}
void add(int v){
i += v*2;
}
}

public class Qd073{
public static void main(String args[]){
bogo(new Extension());
}
static void bogo(Base b){
b.add(8);
b.print();
}
}

a)9
b)18
c)20
d)21
e)22

答案:e

解析:这道题综合考查了好几个知识点,如调用子类的构造方法时会先调用父类的构造方法;如果在子类的构造方法中没有显式调用父类的构造方法,那么创建子类的实例时会先调用父类的缺省构造方法;方法的动态绑定。
    以上代码创建的是Extension类的实例,所以在运行时,所有调用add()方法的过程,将始终和Extension类的add()方法动态绑定。以下是程序依次对变量i的改变过程。
    初始值:i = 0;
    step1:创建实例new Extension()
    先调用父类的缺省构造方法Base(),父类的缺省构造方法中执行add(1),i=0+1*2 -> i=2,再调用子类的缺省构造方法Extension(),子类的缺省构造方法中执行add(2),i=2+2*2 -> i=6.
    step2:执行add(8)
    i=6+8*2 -> i=22


更多java学习资料尽在网址:www.javaedu.com.cn




顶部
 



当前时区 GMT+8, 现在时间是 2009-7-5 01:48

  Powered by Discuz! 5.5.0 © 2001-2007 Comsenz Inc.
Processed in 0.059339 second(s), 4/3 queries

清除 Cookies - 联系我们 - ZDNetChina中文社区 - 无图版