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

© 王丽达 中级黑马   /  2013-7-16 17:36  /  2405 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-16 21:12 编辑

父类的无参构造函数存在的作用,子类一定要调用父类构造函数吗?理解不清

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3

查看全部评分

13 个回复

正序浏览
构造方法,方法名,必须和类名一摸一样
构造方法,没有返回值,不需要写void,也不需要写return
构造方法,只在建立对象的时候,运行一次,仅仅一次 new Person()
只要是类,是class定义的类,就有构造方法
不写,会有默认的,是一个空参数的构造方法
用于给对象进行初始化,换句话说,构造方法,可以用在,建立对象时候,给对象中的成员变量赋值
对象加载成员变量,对象才会去调用构造方法
子类构造方法,都要去访问父类中无参数的构造方法,这是默认的
无论子类的构造方法,有几个,都会默认的访问父类空参数的构造方法
子类的构造方法之间的调用用的this,必须第一行,第一行是super还是this
只要保证子类构造方法,直接还是间接的可以访问到父类的构造方法就可以了
回复 使用道具 举报
清心玉质 发表于 2013-7-17 12:55
当子类继承父类时,子类包括父类的所有成员(包括变量、函数、构造函数,private成员被隐藏而不能访问) ...

嗯,那应该说是调用父类的构造方法吧,,如果子类继承了父类的方法,那么子类便应该能够重写父类的方法,我的理解对么?
回复 使用道具 举报
魏先勇 发表于 2013-7-17 05:00
构造函数可以被继承吗?

当子类继承父类时,子类包括父类的所有成员(包括变量、函数、构造函数,private成员被隐藏而不能访问),子类同时继承了父类的接口,即所有可以给父类对象的消息同时也可以发送给子类对象。
子类的所有构造函数默认都会访问父类中的空参数的构造函数,因为子类每一个构造函数内第一行都有一句隐式super();当父类中没有空参数的构造函数时,子类必须手动通过super语句来指定要访问父类中的构造函数。
回复 使用道具 举报
masterV 来自手机 中级黑马 2013-7-17 05:00:55
11#
清心玉质 发表于 2013-7-16 20:36
构造函数 是一种特殊的方法 主要用来在创建对象时初始化对象 即为对象成员变量赋初始值,总与new运算符一起 ...

构造函数可以被继承吗?
回复 使用道具 举报
当一个子类继承父类的时候就是相当于已经把父类所有的代码 在子类从新写了一遍了,  有没有参数和是不是构造方法 都已经不重要了。至于能不能实现 。 掉不掉用。 都已经在内存里出现了   ,  如果你不想让他实现或者是调用 或者是你讨厌父类的构造函数, 可以覆盖
回复 使用道具 举报
当一个子类继承父类的时候就是相当于已经把父类所有的代码 在子类从新写了一遍了,  有没有参数和是不是构造方法 都已经不重要了。至于能不能实现 。 掉不掉用。 都已经在内存里出现了   ,  如果你不想让他实现或者是调用 或者是你讨厌父类的构造函数, 可以覆盖

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
构造函数 是一种特殊的方法 主要用来在创建对象时初始化对象 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 特别的一个类可以有多个构造函数 可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。子类不一定要继承父类的构造函数,可以根据需要重写

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
一定会有一个子类的构造函数调用父类的无参构造函数。
回复 使用道具 举报
因为子类继承了父类,获取到了父类中内容,所以在使用父类内容之前,
要先看父类是如何对自己的内容进行初始化的。
回复 使用道具 举报
子类一定会调用父类的构造函数的,当调用父类的无参构造函数的时候,默认的会有super().
当调用父类的又参的构造函数的时候,要用手动调用super(参数)调用。
希望对你有所帮助!
回复 使用道具 举报
要的。子类继承后如果不调用,其实是默认调用了父类的无参构造。调用有参的是用关键字super调用。
回复 使用道具 举报
一定要!
因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的。所以子类在对象初始化时,要先访问一下父类中的构造函数。
父类中没有空参数的构造函数时,子类必须手动通过super()来指定访问父类中的构造函数。
回复 使用道具 举报
当一个类继承另外一个类的时候,当子类创建对象时子类会自动调用super();也就是自动调用父类的无参构造函数,要想调用父类有参的构造函数只能自己调用super();然后再传参数;

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

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