黑马程序员技术交流社区

标题: 关于继承中子父类的构造函数关系 [打印本页]

作者: 许聪聪    时间: 2013-6-5 14:47
标题: 关于继承中子父类的构造函数关系
本帖最后由 许聪聪 于 2013-6-12 16:56 编辑

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

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

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



我也是学习新手,希望能对楼主有作用.
作者: 袁梦希    时间: 2013-6-5 14:49
继续努力
作者: 闫月乐    时间: 2013-6-5 15:07
    在对子类对象初始化时,父类中的构造函数也会运行.那是因为子类中的构造函数中默认第一行有一条隐式语句super();
    super():该语句会访问父类中空参数的构造函数,而且所有类中所有的构造函数默认第一行都是super();包括父类,因为object是所有类的终极类.
如果父类中没有空参数的构造函数(说明父类中的构造函数全部是有参数的),那么需要子类在其构造函数中手动通过super(参数)来获取父类的构造函数.

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



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

作者: 王鑫    时间: 2013-6-5 15:28
子类是对父类的继承,所以子类在创建时需要先参考父类已经定义好的初始化内容,然后再执行自己特有的初始化内容。
总结一下子类创建时,初始化的顺序。
1.父类静态代码块
2.子类静态代码块
3.父类构造代码块
4.父类构造函数
5.子类构造代码块
6.子类构造函数




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