A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 许聪聪 中级黑马   /  2013-6-5 14:47  /  2237 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 许聪聪 于 2013-6-12 16:56 编辑

关于继承中子父类的构造函数关系
子类中的构造函数为什么要去访问父类中的构造函数。
有什么做用,对子类初始化有什么影响?
希望越详细越好 !谢谢

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

6 个回复

倒序浏览
构造函数
1,函数名与类名相同
2,根本就不需要定义返回值类型
3,所以不能写return;
作用:给对象进行初始化
注意:!!对象一建立就会自动调用与之对应的构造函数
构造函数小细节:
当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数。

当在类中自定义了构造函数后,默认的构造函数就木有啦。



我也是学习新手,希望能对楼主有作用.

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
继续努力

点评

Akm
继续努力  发表于 2013-6-5 15:31
回复 使用道具 举报
    在对子类对象初始化时,父类中的构造函数也会运行.那是因为子类中的构造函数中默认第一行有一条隐式语句super();
    super():该语句会访问父类中空参数的构造函数,而且所有类中所有的构造函数默认第一行都是super();包括父类,因为object是所有类的终极类.
如果父类中没有空参数的构造函数(说明父类中的构造函数全部是有参数的),那么需要子类在其构造函数中手动通过super(参数)来获取父类的构造函数.

为什么子类一定要访问父类中的构造函数呢?
        因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据初始化的(构造函数就是为了给数据进行初始化,所以要先去看父类中的构造函数是怎么定义的).否则你连父类中有什么属性都不知道,何谈继承?


评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
首先呢你说到了面向对象的一大特性--->继承。它可以使同样的代码得到重用。当一个类派生出它的子类,那么它的子类将拥有父类的属性和方法,子类也可以定义自己特有的属性和方法来满足其他的需求。
在子类对象创建的时候会先调用父类的构造方法,所以super写不写,它都默认的在子类构造方法的第一行,如果直接创建了子类而不创建父类,那么子类中又怎么能够去访问父类中的属性和方法呢。所有的类最终都是继承了Object的,所以我们才可以调用toString等方法。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

回复 使用道具 举报
子类是对父类的继承,所以子类在创建时需要先参考父类已经定义好的初始化内容,然后再执行自己特有的初始化内容。
总结一下子类创建时,初始化的顺序。
1.父类静态代码块
2.子类静态代码块
3.父类构造代码块
4.父类构造函数
5.子类构造代码块
6.子类构造函数

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马