关于继承的一个问题

qinyupandeng 2009-06-05 07:33:15

class A
{
A()
{ this.test();

}
void test()
{
System.out.println("aa");
}
}
class B extends A
{
int i=10;

void test()
{
System.out.println(i);
}
}
public class TestA
{
public static void main(String[] args)
{
A a=new B();
}
}




这个输出的结果是0;
搞不懂这个0是怎么来的?为什么不是输出B中的10呢?
在线等啊!!
...全文
49 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
wofkn 2009-06-07
  • 打赏
  • 举报
回复
B b = new B();
也是0,何解
四十三号 2009-06-07
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 tfsict2008 的回复:]
引用 9 楼 mgoann 的回复:

这道题主要考察Java类的初始化顺序!父类static变量--》父类static代码块--》父类本地变量--》父类初始化块--》父类构造方法--》子类static变量--》子类static代码块--》子类本地变量--》子类初始化块--》子类构造方法。

如果在子类里面声明 static int i = 88;结果是多少呢,怎么解释呢?
[/Quote]

static是在类加载的时候就初始化了。
wenq0917 2009-06-07
  • 打赏
  • 举报
回复
奇怪,怎么不是出现aa而出现0呢?
awaitdeng 2009-06-07
  • 打赏
  • 举报
回复
学习了~~
tfsict2008 2009-06-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 mgoann 的回复:]
这道题主要考察Java类的初始化顺序!父类static变量--》父类static代码块--》父类本地变量--》父类初始化块--》父类构造方法--》子类static变量--》子类static代码块--》子类本地变量--》子类初始化块--》子类构造方法。
[/Quote]

我感觉这个同学说的不对,建议大家 把 jvm装载 连接 初始化类的过程搞清楚,其中的clinit()和init()方法在什么时间调用搞清楚!
tfsict2008 2009-06-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 mgoann 的回复:]
这道题主要考察Java类的初始化顺序!父类static变量--》父类static代码块--》父类本地变量--》父类初始化块--》父类构造方法--》子类static变量--》子类static代码块--》子类本地变量--》子类初始化块--》子类构造方法。
[/Quote]
如果在子类里面声明 static int i = 88;结果是多少呢,怎么解释呢?
qinyupandeng 2009-06-07
  • 打赏
  • 举报
回复
通过大家们的跟帖,我学到了不少!谢谢了~~
明白啦~
结贴给分去了~~
qinyupandeng 2009-06-07
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 wofkn 的回复:]
B b = new B();
也是0,何解
[/Quote]

因为B类继承了A类,所以虚拟机还是调用的A类中的构造方法!

qinyupandeng 2009-06-07
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 tfsict2008 的回复:]
引用 9 楼 mgoann 的回复:
这道题主要考察Java类的初始化顺序!父类static变量--》父类static代码块--》父类本地变量--》父类初始化块--》父类构造方法--》子类static变量--》子类static代码块--》子类本地变量--》子类初始化块--》子类构造方法。


如果在子类里面声明 static int i = 88;结果是多少呢,怎么解释呢?
[/Quote]

先执行static 中的,然后执行其它,所以结果是88
9楼写的顺序并不是全部正确的!
chen105315 2009-06-06
  • 打赏
  • 举报
回复
这是有关继承类初始化顺序的问题,好好看看书吧……
eddy615 2009-06-06
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 breezes2008 的回复:]
test()方法被重写,而在A类中构造器中调用B类的test()方法,而此时B类中的i还未初始化,只好是默认的是0!
[/Quote]
正解
lulu0126 2009-06-06
  • 打赏
  • 举报
回复
学习了!

tks!
lulu0126 2009-06-06
  • 打赏
  • 举报
回复
mark
breezes2008 2009-06-06
  • 打赏
  • 举报
回复
test()方法被重写,而在A类中构造器中调用B类的test()方法,而此时B类中的i还未初始化,只好是默认的是0!
三仙半 2009-06-06
  • 打赏
  • 举报
回复
顶9楼,分析的够透彻。
在构造方法中调用自身的方法还是值得商榷的,我觉得这个测试本身的设计是有问题的。
johnston678 2009-06-06
  • 打赏
  • 举报
回复
学会用Eclipse中的Debug调试,可以单步执行,查看程序流程!
kaguhuno 2009-06-06
  • 打赏
  • 举报
回复
如果把int i = 10;这条语名放在test()中就能输出10了
kaguhuno 2009-06-06
  • 打赏
  • 举报
回复
虽然覆盖了B类中的方法,但是并没有使用B类中声明的i=10,所以就用默认值0
mgoann 2009-06-06
  • 打赏
  • 举报
回复
这道题主要考察Java类的初始化顺序!父类static变量--》父类static代码块--》父类本地变量--》父类初始化块--》父类构造方法--》子类static变量--》子类static代码块--》子类本地变量--》子类初始化块--》子类构造方法。
linshaoang 2009-06-06
  • 打赏
  • 举报
回复
支持9楼看法



--------------------------------------------
http://www.pkwutai.cn
加载更多回复(10)

62,614

社区成员

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

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