黑马程序员技术交流社区

标题: 继承学习,谁可以分析出来 [打印本页]

作者: wwwjpm@126.com    时间: 2015-12-11 22:48
标题: 继承学习,谁可以分析出来
class C {
        public C() {
                System.out.println("C");
        }
}

class B {
        public B() {
                System.out.println("B");
        }
}

class A extends C{
        public B b = new B();
       
        public A() {
                System.out.println("A");
        }
       
        public static void main(String[] args) {
                A a = new A();
        }
}

作者: Q932036165    时间: 2015-12-11 22:53
这个还真是要坐等....
作者: zcbcba123    时间: 2015-12-12 01:06
我认为应该是中国职联CBA
这样的题有个规律,先看父类。
首先,程序走main入口进来,然后运行 A a = new A();
然后程序发现他又父类,就去找他的父类。
然后发现他的父类C没有成员变量需要初始化但有默认构造,所以运行默认构造输出了C
然后父类弄完了就回来走A类,发现,咦。。A类有个成员变量public B b需要初始化为new B();那么就要去走B类。
然后我们看B类没有父类,所以看他有没有成员变量,然后看有没有默认构造。他有默认构造,所以就输出了B
最后回到A类运行A类的默认构造A(),输出A
所以最后是CBA   我一开始还犹豫会不会运行B。。因为没考虑过成员变量的初始化问题。。然后测试了下确实是CBA然后放心啦
作者: ash午夜阳光    时间: 2015-12-12 01:46
CBA父类构造C,显示初始化B,构造A
作者: wwwjpm@126.com    时间: 2015-12-12 11:41
zcbcba123 发表于 2015-12-12 01:06
我认为应该是中国职联CBA
这样的题有个规律,先看父类。
首先,程序走main入口进来,然后运行 A a = new A( ...

分析的很到位,赞一个{:2_30:}
作者: zcbcba123    时间: 2015-12-12 11:54
wwwjpm@126.com 发表于 2015-12-12 11:41
分析的很到位,赞一个

谢谢...就是技术分挣得太慢..很头疼
作者: wwwjpm@126.com    时间: 2015-12-12 11:56
zcbcba123 发表于 2015-12-12 11:54
谢谢...就是技术分挣得太慢..很头疼

都一样,帮忙价格好友,我要挣五个黑马
作者: wwwjpm@126.com    时间: 2015-12-12 11:57
zcbcba123 发表于 2015-12-12 11:54
谢谢...就是技术分挣得太慢..很头疼

去每个版块回复哪些有回复奖励的帖子
作者: Murphye    时间: 2015-12-12 12:56
一个对象实例化的过程 A a = new A();
1.JVM会读取指定的路径下的A.class文件,并加载进内存,并会先加载A的父类(即先加载C.class)
2.在内存中开辟C空间,并分配地址。
3.对对象C的属性进行默认初始化。
4.调用C的构造函数进行初始化,此时输出C
5.接着初始化A的成员变量,public B b = new B();时,初始化它,此时输出B
6.最后调用A的构造函数进行初始化,输出A
最终结果为CBA


作者: zcbcba123    时间: 2015-12-12 13:50
wwwjpm@126.com 发表于 2015-12-12 11:57
去每个版块回复哪些有回复奖励的帖子

恩,好像可以发帖子要积分~
作者: Zrz_K    时间: 2015-12-12 19:15
9楼大神分析的很牛!理解了内存图的步骤再看这题就简单多了~
作者: songjianzaina    时间: 2015-12-12 22:27
值得学习~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2