黑马程序员技术交流社区

标题: 构造函数问题 [打印本页]

作者: 王丽达    时间: 2013-7-16 17:36
标题: 构造函数问题
本帖最后由 杨兴庭 于 2013-7-16 21:12 编辑

父类的无参构造函数存在的作用,子类一定要调用父类构造函数吗?理解不清
作者: 木、易m    时间: 2013-7-16 17:39
当一个类继承另外一个类的时候,当子类创建对象时子类会自动调用super();也就是自动调用父类的无参构造函数,要想调用父类有参的构造函数只能自己调用super();然后再传参数;
作者: hx32    时间: 2013-7-16 18:11
一定要!
因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的。所以子类在对象初始化时,要先访问一下父类中的构造函数。
父类中没有空参数的构造函数时,子类必须手动通过super()来指定访问父类中的构造函数。
作者: 诸隆隆    时间: 2013-7-16 18:20
要的。子类继承后如果不调用,其实是默认调用了父类的无参构造。调用有参的是用关键字super调用。
作者: 杨增坤    时间: 2013-7-16 18:22
子类一定会调用父类的构造函数的,当调用父类的无参构造函数的时候,默认的会有super().
当调用父类的又参的构造函数的时候,要用手动调用super(参数)调用。
希望对你有所帮助!
作者: Xiacker    时间: 2013-7-16 18:43
因为子类继承了父类,获取到了父类中内容,所以在使用父类内容之前,
要先看父类是如何对自己的内容进行初始化的。
作者: 王靖远    时间: 2013-7-16 20:32
一定会有一个子类的构造函数调用父类的无参构造函数。
作者: 清心玉质    时间: 2013-7-16 20:36
构造函数 是一种特殊的方法 主要用来在创建对象时初始化对象 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 特别的一个类可以有多个构造函数 可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。子类不一定要继承父类的构造函数,可以根据需要重写
作者: 王峰230321    时间: 2013-7-16 20:40
当一个子类继承父类的时候就是相当于已经把父类所有的代码 在子类从新写了一遍了,  有没有参数和是不是构造方法 都已经不重要了。至于能不能实现 。 掉不掉用。 都已经在内存里出现了   ,  如果你不想让他实现或者是调用 或者是你讨厌父类的构造函数, 可以覆盖
作者: 王峰230321    时间: 2013-7-16 20:40
当一个子类继承父类的时候就是相当于已经把父类所有的代码 在子类从新写了一遍了,  有没有参数和是不是构造方法 都已经不重要了。至于能不能实现 。 掉不掉用。 都已经在内存里出现了   ,  如果你不想让他实现或者是调用 或者是你讨厌父类的构造函数, 可以覆盖
作者: masterV    时间: 2013-7-17 05:00
清心玉质 发表于 2013-7-16 20:36
构造函数 是一种特殊的方法 主要用来在创建对象时初始化对象 即为对象成员变量赋初始值,总与new运算符一起 ...

构造函数可以被继承吗?
作者: 清心玉质    时间: 2013-7-17 12:55
魏先勇 发表于 2013-7-17 05:00
构造函数可以被继承吗?

当子类继承父类时,子类包括父类的所有成员(包括变量、函数、构造函数,private成员被隐藏而不能访问),子类同时继承了父类的接口,即所有可以给父类对象的消息同时也可以发送给子类对象。
子类的所有构造函数默认都会访问父类中的空参数的构造函数,因为子类每一个构造函数内第一行都有一句隐式super();当父类中没有空参数的构造函数时,子类必须手动通过super语句来指定要访问父类中的构造函数。
作者: masterV    时间: 2013-8-1 16:29
清心玉质 发表于 2013-7-17 12:55
当子类继承父类时,子类包括父类的所有成员(包括变量、函数、构造函数,private成员被隐藏而不能访问) ...

嗯,那应该说是调用父类的构造方法吧,,如果子类继承了父类的方法,那么子类便应该能够重写父类的方法,我的理解对么?
作者: 黑马王晓明    时间: 2013-8-1 18:01
构造方法,方法名,必须和类名一摸一样
构造方法,没有返回值,不需要写void,也不需要写return
构造方法,只在建立对象的时候,运行一次,仅仅一次 new Person()
只要是类,是class定义的类,就有构造方法
不写,会有默认的,是一个空参数的构造方法
用于给对象进行初始化,换句话说,构造方法,可以用在,建立对象时候,给对象中的成员变量赋值
对象加载成员变量,对象才会去调用构造方法
子类构造方法,都要去访问父类中无参数的构造方法,这是默认的
无论子类的构造方法,有几个,都会默认的访问父类空参数的构造方法
子类的构造方法之间的调用用的this,必须第一行,第一行是super还是this
只要保证子类构造方法,直接还是间接的可以访问到父类的构造方法就可以了





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