黑马程序员技术交流社区

标题: 关于子类调用父类 [打印本页]

作者: 史卜坤    时间: 2012-7-4 10:27
标题: 关于子类调用父类
我在父类中定义了一个有参的构造函数以后,子类中必须要在构造函数中调用super。不然编译器报错,如下
复制代码
注释掉了person()后,子类就必须调用super,而在父类中显示定义了Person()以后,子类就可以随便定义构造函数了··。
子类自己定义自己的构造函数咋就不可以呢。为什么非要调用父类的super()呢??
作者: 周素强    时间: 2012-7-4 10:31
因为子类中的构造函数中第一行为隐式的super语句,会去调用父类中无参的构造函数,所以当你父类中没有无参的构造函数时,就会报错。这种情况下你需要在子类的构造函数中手动指定super语句去调用父类中有参的构造函数。
作者: 陈洋洋    时间: 2012-7-4 16:44
子类继承父类后在子类构造函数中,会隐式写一句super() 去调用父类无参的构造函数,将父类加载进内存以便子类能够调用到父类的方法,但是如果父类没有无参构造函数子类在构造函数中隐式写的super(),就不能调用..就会报错,所以就需要显示的手动去写super语句并指定要调用的构造函数的实参,以便加载父类...但是要注意,要在子类构造函数显示定义super()语句的话..就不能再写this()语句去调用本类的其他构造函数,因为super()和this()都必须出现在构造函数的第一行,所以他们不能共存....
作者: dev    时间: 2012-7-4 17:29
因为在子类的构造函数中第一行默认就会有一句super(),这句会去调用父类的空参数
的构造函数,而你的父类中已经写了一个带参数的构造函数,所以这个默认的空参数
的构造函数就会自动消失。这时,你要么在父类中加上空参数的构造函数,要么在子类
中手动调用自己写好的父类的构造函数。


作者: 林康春    时间: 2012-7-5 00:07
★╃小胖╃☆ 发表于 2012-7-4 13:03
首先子类继承父类所有成员变量和成员方法,但是子类不能继承父类的构造方法.但是子类的构造方法中可以用supe ...

子类不能继承父类的private成员和构造函数
父类的成员变量private String name,是不能继承的,所以子类必须定义




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