黑马程序员技术交流社区

标题: 继承、构造函数! [打印本页]

作者: 寐海流风    时间: 2014-6-13 21:02
标题: 继承、构造函数!
本帖最后由 寐海流风 于 2014-6-21 15:03 编辑

下面是题目和自己的分析:

有这样三个类,Person、Student、GoodStudent。

其中GoodStudent继承于Student,Student继承于Person。

如何证明创建GoodStudent时是否调用了Person的构造函数?

在GoodStudent中是否能指定调用Student的哪个构造函数?

在GoodStudent中是否能指定调用Person的哪个构造函数?
*
* 思路:
* 1、在构造函数中,第一行代码要么是this();要么是super();如果第一行代码不是这两个语句,那么就是隐式的调用super();
* this()用在构造函数中表示:调用本类的其他构造函数;super()表示调用父类的构造函数;
* 至于他们调用的是哪个构造函数,则根据()内的参数而定,也就是调用参数个数、类型跟()内传入的参数、个数类型一致的对应构造函数;
* 而且:使用this()和super()的构造函数的参数,是包含()内所传的参数;
* 当然()内不穿参数表示调用空参构造器,但是()内所传参数必须是this和super语句所在构造函数的参数的子集;
*
* 2、如何证明创建GoodStudent时是否调用了Person的构造函数?
* 通过上述规律,一个类中若只有一个构造函数,那么这个构造函数的第一条语句必然是super(),或者隐式的super();
* 如果有x>=2 个构造函数,那么至多有x-1 个构造函数第一条语句是this()语句,
* 也就是至少有一个构造函数的是super()语句,而且这个构造函数一般都是空参的;
*
* 那么也就是说每个类中至少有一个构造函数是用super()语句调用了父类的某个构造函数(除了Object类),直到调用Object类的构造函数;
* 而且这个类中其他的构造函数就算第一条语句是this(),那么其最终也会调用逐级调用父类的构造函数,直到调用Object类的构造函数。
*
* 所以,创建GoodStudent时,必然调用了Person的构造函数。
*
* 3、GoodStudent中是否能指定调用Student的哪个构造函数?
* 综合前面所述,GoodStudent的构造函数能通过super()语句,调用()中所传参数一致的父类Student的构造函数;
* 但是super()语句中()所传参数必须是其所在GoodStudent的构造函数的参数的子集。
* 又因,父类是从其子类中抽象出来的类,所以父类拥有的属性,子类一般情况下都会有,
* 所以一般情况下,子类的构造函数的参数集>=父类的构造函数的参数集(如Student类的参数集name;age;score大于父类Person的参数集name;age);
*
* 所以GoodStudent类中的构造函数在构建类时,可以定义调用Student类的构造函数,
* 而保证子类的构造函数的参数列表>=父类的参数列表即可。
*
* 4、在GoodStudent中是否能指定调用Person的哪个构造函数?
* 综合上面所述,若Student类是先于GoodStudent创建的类,
* 那么GoodStudent的构造函数只能调用到,Student类的构造函数通过super()调用到的Person类的构造函数;
* 而调用不到Student类的构造函数中没有super()语句调用到的Person类的构造函数;
*
* 若Student类和其子类GoodStudent是同时创建的类,
* 那么GoodStudent则可以通过super()语句调用Student相应的构造函数,再通过Student的super()语句调用Person的相应构造函数;
* 但是都要确保super()语句所在函数的参数列表>= super语句的括号()中所传的参数列表,也就是>= super所调用的父类构造函数的参数列表。
* 5、上面所说的都是非静态的属性参数;但是在this()和super()中可传入static参数,而且在构造函数没有传入这个static参数时也可以在super和this中传入,具体用法又是怎样的呢?


首先:题目我觉得有歧义,我理解的题目意思都是在问GoodStudent类的构造函数与其父类Student和爷类Person的构造函数调用关系,主要就是考super;
其次:感觉又有点像在说,GoodStudent类中可不可以随便使用父类和爷类的构造方法,考一些封装的知识等?——语文帝分析下题目是哪个意思呢?

最后:就按自己理解的意思的话,不知我分析的过程有没有错误,或者改进。感觉自己有的分析不准。

作者: 为爱算了吧    时间: 2014-6-15 09:54
niurenla de ahis




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