结果:
new A
new B
new A
new A
new B
new C
test2
对结果不解,原以为结果是A->A->B->C->A->B->demo或者A->B->demo->A->A->B->C,哪位大虾能解释下,最好能内存情况也一起说说作者: 肖琦 时间: 2012-7-25 15:41 本帖最后由 肖琦 于 2012-7-25 20:36 编辑
我画图画着画着画凌乱了。。。
线太多了,没法整了
我直接说好了
首先代码有问题,不知道你怎么能运行出来结果。。。
就是那个test2没有返回值,还对一个函数创建对象。。。囧一个
运行步骤是这样的
首先执行主函数,建立test2的对象
因为demo继承b,所以初始化B的对象
B继承A,所以初始化A,直接运行A的程序 打印new A
然后对B进行初始化,打印new B
这时开始执行private A m = new A();
打印new A
继续private B b = new B();
跟上面说的一样,打印
new A
newB
C没有继承关系直接打印
newC
下面最后调用Test2的构造函数
new demo
楼主不好意思啊,画图没画成,线太多了,我自己看着都晕
作者: 徐然 时间: 2012-7-25 19:25
class demo extends B{//6:对本类初始化
private A m = new A();//7:初始化A对象对应的类
private B b = new B();//9:初始化B对象对应的类
private C c = new C();//14:初始化C对象对应的类
public test2() {
System.out.println("new demo");//16:执行test2构造函数,打印Demo
}
public static void main(String[] args) {
new test2();//1:读main中的这句,初始化test2对象对应的类
}
}
class A{//3:再上层父类初始化. 11:父类初始化
public A() {//4:执行再上层父类构造函数,打印一个A 8:调用A构造函数,打印A 12:执行A构造函数,打印A
System.out.println("new A");
}
}
class B extends A{//2:父类初始化 10:初始化B类
public B() {//5:执行父类构造函数,打印一个B 13:执行B构造函数,打印B
System.out.println("new B");
}
}
class C{
public C() {//15:执行C构造函数,打印C
System.out.println("new C");
}
}作者: 马州州 时间: 2012-7-25 20:01
楼主,你程序挂了哎。。。。
程序有点问题
编译失败作者: 郑义 时间: 2012-7-25 20:05
首先你的代码是有问题的啊。
类名demo没大写,函数test2没有返回值,而且new了一个函数。。。