Q22
What will be written to the standard output when the following program is run? 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();
}
} 1) 9
2) 18
3) 20
4) 21
5) 22 答案是:5)22
我运行了程序,正是答案是正确的。
但就是不知道为什么,各位朋友帮帮忙!
谢谢
What will be written to the standard output when the following program is run? 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();
}
} 1) 9
2) 18
3) 20
4) 21
5) 22 答案是:5)22
我运行了程序,正是答案是正确的。
但就是不知道为什么,各位朋友帮帮忙!
谢谢
解决方案 »
- 关于多层继承问题
- 一个关于charAt()的奇怪问题
- 关于传输文件?
- 100分期待牛人~~如何设置JVM默认的ClassLoader ~~
- 我没分了,麻烦前辈做一下做下作业题,谢谢了
- 为什么从frame继承一个类后加入其他控件无法正常显示?
- package的问题
- 大家援助一下呀!!!前贴《100分求教jtable问题???(lhdjk ) 》100分我一定落实
- java tcp/ip一个小问题
- 如何将一个树的全部节点都展开?(包括子目录下面的节点),最好有源代码!谢谢了!
- 如何在ant中判断某文件是否包含字符串“********************”或判断文件是否为空
- 我想问下大家,开发java都用什么开发工具呀?
static void bogo(Base b) {
b.add(8);
b.print();
}
中的b,不是在编译期就进行绑定了吗?她调用的应该是变量所属类型的那个类中的方法,也就是Base中的add方法啊。
非静态函数是在运行时绑定,根据持有变量的真正对象来决定调用的方法。
但是,这是静态方法啊~~~
int i;
Base() { //第一步:先构造父类
add(1); //调用父类中的add方法
}
void add(int v) { //第二步:结果使得i=1
i += v;
}
void print() {
System.out.println(i);
}
}
class Extension extends Base {
Extension() { //第三步:再构造子类
add(2); //调用子类中的add方法
}
void add(int v) { // //第四步:结果使得i=1+2*2=5
i += v*2;
}
}
public class Qd073 {
public static void main(String args[]) {
bogo(new Extension());
}
static void bogo(Base b) {
b.add(8); //第五步:调用Base也就是父类中的add方法,使得i=5+8=13
b.print(); //第六步:打印13。才发现选项中居然没有13,晕死!!!看来错得很离谱啊!!
}
} 哪位朋友能像我这种形式给出解释,就马上结贴!
int i; //i被初始化为0
Base() {
add(1); //add()被子类重写了, 因此调用子类的add(), i为0+1*2=2
}
void add(int v) {
i += v;
}
void print() {
System.out.println(i);
}
} class Extension extends Base {
Extension() {
////先调用父类构造函数, 得i=2
add(2); //调用add(), 得i=2+2*2=6
}
void add(int v) {
i += v*2;
}
}
public class Qd073 {
public static void main(String args[]) {
bogo(new Extension()); //new Extension()的i已经是6, 再被b.add()调用, 得6+16=22
}
static void bogo(Base b) {
b.add(8); //调用Extension类中的add()方法, 即b.i = b.i + 8 * 2 = b.i + 16
b.print();
}
} 结果为22.