黑马程序员技术交流社区
标题:
关于构造方法。。走火入魔了
[打印本页]
作者:
黑马伍仪华
时间:
2012-3-3 20:44
标题:
关于构造方法。。走火入魔了
本帖最后由 375809600 于 2012-3-3 20:45 编辑
.
关于构造方法的一点疑惑,为什么父类的构造方法之后还调用了其他的构造方法?
表述不清,直接上代码
class A {
A(){
System.out.println("A()");
}
A(int i){
System.out.println("A(1)");
}
}
class B {
B(){
System.out.println("B()");
}
}
class C extends A{
B b=new B();
C(){
super(5);
System.out.println("C()");
}
}
public class Fifth {
public static void main(String[] args) {
// TODO Auto-generated method stub
C c=new C();
}
}
输出是:
A(1)
B()
C()
问题是为什么在A(1)之后才出B(),这样等于c的构造方法被打断了不是麽?新手就执教
作者:
王杰
时间:
2012-3-3 21:13
难道调用构造函数对类进行初始化时,先调用父类的构造函数进行初始化,然后如果本类还创建了别的对象,将先初始化这个对象,然后在继续原来的构造函数吗?
作者:
林翔
时间:
2012-3-3 21:21
看得晕乎乎的。。。
作者:
吴璞玉
时间:
2012-3-3 21:25
帮你查了一些知识
new对象的时候首先是调用父类构造函数(如果是用super()方法指定具体的某个父类构造函数则使用指定的那个父类构造函数),然后按顺序分别调用类成员变量和实例成员变量的初始化表达式,调用类本身构造函数。
作者:
王国华
时间:
2012-3-3 21:38
本帖最后由 王国华 于 2012-3-3 21:40 编辑
Java初始化顺序:先初始化父类的静态代码--->初始化子类的静态代码-->初始化父类的非静态代码--->初始化父类构造函数--->初始化子类非静态代码--->初始化子类构造函数
刚查到的。。
作者:
王睿
时间:
2012-3-3 21:44
因为c继承了A,在c的构造中super(5); 又调用了A的带参构造,所以结果是先A(1)。
作者:
蒙武辉
时间:
2012-3-3 21:47
首先调用父类的构造函数对父类进行初始化,然后父类在调用自己的构造函数对自己进行初始化。当我们new c()时调用super(5); ,然后调用B的构造函数,再就是调用c的构造函数。所以先A(1) --> B() --> C()
作者:
陈斌
时间:
2012-3-3 22:32
程序是一句一句执行的
class C extends A{
B b=new B();
C(){
super(5);
System.out.println("C()");
}
new一个 c类的过程 在 c类内部先创建b类b类就初始化执行打印语句
然后再初始化c类的构造函数、 初始化的过程先执行super(5)。这句就调用了父类的带参数的构造函数、就打印出a(1),最后执行System.out.println("C()");
这应该不难理解吧
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2