黑马程序员技术交流社区
标题:
关于子类调用父类
[打印本页]
作者:
史卜坤
时间:
2012-7-4 10:27
标题:
关于子类调用父类
我在父类中定义了一个有参的构造函数以后,子类中必须要在构造函数中调用super。不然编译器报错,如下
class Person
{
private String name;
// Person(){ //注释掉,子类就会报错
//
// }
public Person(String name)
{
this.name=name;
}
public String getName()
{
return name;
}
}
class Student extends Person
{
String name;
Student(String name){ // 要我必须
this.name = name ;
}
}
复制代码
注释掉了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