黑马程序员技术交流社区
标题:
继承的一道题,求解
[打印本页]
作者:
biebie
时间:
2014-12-11 22:21
标题:
继承的一道题,求解
看下面的代码,选择正确的结论:
class SuperClass
{
int i=8 ;
SuperClass()
{
add(1);
}
void add(int j)
{
i=i+j;
}
}
class SubClass extends SuperClass
{
int i=8;
void add(int j)
{
i=i+2*j;
}
}
public class MainClass
{
public static void main(String args[])
{
SuperClass a=new SubClass();
System.out.println(a.i);
}
}
A 、编译时出现错误 B、运行时出现错误
C、输出 10 D、输出 8
我的理解:子类先去调用父类构造函数,然后执行add(1);执行的是子类中重写的函数。所以得出结果是10.
但是答案是D,为什么是8呢???
作者:
史云龙
时间:
2014-12-11 22:51
创建对象时,因为i不是静态的所以在内存中i只有初始化的值0。
所以在创建对象后,你的想法是对的,i的值最后变成2,
但是在对象调用i后,那么就会对i进行赋值,所以就又变成了8.
作者:
農邨尛夥兒
时间:
2014-12-11 23:25
我追踪了下程序 运行情况:new SubClass()-->SubClass构造函数-->SuperClass构造函数-->add(j)这里执行的是SubClass的add() -->之后定义SubClass的成员变量i,i就又被赋值8
根据追踪推测的不知道对不对!再查查资料
作者:
Quasimodo
时间:
2014-12-11 23:32
因为父类构造函数中add()调用的是子类的add,子类add执行的时候用的是子类的 i,得到 i 的结果也是子类的 i ,跟父类的 i 半毛钱关系都没有。 所以父类中的 i 一直都是8
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2