| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2746 人关注过本帖
标题:[求助]一个子类中显示初始化,是在父类完成初始化前还是后
取消只看楼主 加入收藏
线衣男
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-4-19
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:2 
[求助]一个子类中显示初始化,是在父类完成初始化前还是后

一个对象实例化过程,以Person p = new Person();为例:

    1. JVM会读取指定的路径下的Person.class文件,并加载进内存,并会先加载Person的父类(如果有直接的父类的情况下)。

    2. 在内存中开辟空间,并分配地址。

    3. 并在对象空间中,对对象的属性进行默认初始化。

    4. 调用对应的构造函数进行初始化。

    5. 在构造函数中,第一行会先到调用父类中构造函数进行初始化。

    6. 父类初始化完毕后,再对子类的属性进行显示初始化。

    7. 再进行子类构造函数的特定初始化。

    8. 初始化完毕后,将地址值赋值给引用变量。

这是老师最开始讲的,讲的时候没什么感觉跟这就下来了,后来过了好久再回来复习的时候突然感觉又有几个地方看不懂了,还请各位前辈指点一下迷津

                在这之前自己写了段代码试了下,父类中定义个 name,age子类中也定义了一个name,age,结果new一个子类传的空参,打印显示的是子类的name,age
                这是说明是在父类进行完一系列初始化之后再对子类进行显示初始化赋值吗? 还是说我在子类中定义的name,age和父类中定义的name,age不是同一
                个变量


    问题 1:     在第3步  3.并在对象空间中,对对象的属性进行默认初始化。这句话之前我能理解,可第4步调用对应的构造函数.对父类进行一系列初始化之后
                再对子类进行显示初始化赋值,这我就有点懵逼了,在调用对应的构造函数之前,子类不是应该已经完成了显示初始化吗?   正常的步骤不应该是1.  
                默认初始化,2. 显示初始化,3.构造函数初始化吗?   为什么这上面写的是在父类初始化完毕后,再对子类进行显示初始化?
         
         2:     在第7步  7. 再进行子类构造函数的特定初始化。这之前不是已经通过子类的构造函数对父类进行初始化了吗,怎么又再进进行子类构造函数的特定
                初始化...有点懵
搜索更多相关主题的帖子: 空间 
2016-04-19 18:56
线衣男
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-4-19
收藏
得分:0 
回复 2楼 林月儿
恩呢谢谢啦,我这之前的顺序都是背下来的,以为都理解了,
过了好久再回来看下发现还是很多细节都没理解到位
2016-04-19 22:27
线衣男
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-4-19
收藏
得分:0 
回复 4楼 Tony_PC
哦哦,第一个问题明白呢了,那个子类定义的变量重名的话原来是给父类的覆盖了啊
第三个问题是这个意思吗
class Zi extends Fu{
    public Zi(){
        super();
        System.out.println("子类构造函数的特定初始化");//这一步就相当于是子类构造函数的特定初始化吗?
    }
}

第二个问题我是这个意思
class Zi extends Fu{
    private String name = "哈哈";//这一步不是相当于显示初始化赋值吗?它不是在构造函数初始化之前吗?
                                 //可是上面为什么说是在父类初始化完毕后再对子类进行显示初始化赋值,
                                 //父类进行初始化的时间不是应该在super()访问的时候吗?可这时候子类已经完成了显示初始化啊...就是这没懂
    public Zi(){
        super();
    }
}
2016-04-21 19:33
快速回复:[求助]一个子类中显示初始化,是在父类完成初始化前还是后
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.061307 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved