黑马程序员技术交流社区
标题:
继承的小问题
[打印本页]
作者:
谭培龙
时间:
2012-8-4 13:20
标题:
继承的小问题
class A
{
B b = new B();
A()
{
System.out.print("A");
}
}
class B
{
B()
{
System.out.print("B");
}
static
{
System.out.print("静态代码块");
}
}
class C extends A
{
B b = new B();
C()
{
System.out.print("C");
}
public static void main(String[] args)
{
new C();
}
}
复制代码
有没有大神说说这个代码的执行顺序?
为什么父类A的newB会优先于构造函数执行?
作者:
郑文博
时间:
2012-8-4 14:32
本帖最后由 郑文博 于 2012-8-4 14:33 编辑
class A
{
B b = new B();//3)此处初始化B,则通过B类构造函数初始化输出“B”,
//4)然后向下执行对本父类初始化,通过本类构造函数初始化输出“A”
//父类执行完毕继续子类代码,即27行
A()
{
System.out.print("A");
}
}
class B
{
B()
{
System.out.print("B");
}
static
{
System.out.print("静态代码块");
//1)静态代码块先于对象执行,类存在时变执行。首先执行。
}
}
class C extends A
{
B b = new B();/5)初始化B类,输出“B”,继续下面代码初始化,输出“C”
C()
{
System.out.print("C");
}
public static void main(String[] args)
//2)jvm在main函数开始向下执行,36行中初始化本类,由于本类继承了A,
//则分别对其子父类构造方法初始化,A类中方法先执行,返回第3行代码
{
new C();
}
}
复制代码
此程序执行流程便为,代码中给出的注释序号1)->2)->3)->4)->5),输出结果为:静态代码块BABC
希望能帮到楼主。
作者:
黑马振鹏
时间:
2012-8-4 14:55
楼上回答很好
作者:
谭培龙
时间:
2012-8-4 15:19
问题已解决
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2