黑马程序员技术交流社区
标题:
关于子类必须调用父类隐式构造函数的问题
[打印本页]
作者:
崔岩
时间:
2012-3-23 16:44
标题:
关于子类必须调用父类隐式构造函数的问题
以前没注意这个问题,刚才回答比人问题时候编程试验了下,发现了好多问题啊···(有点绕嘴)
大概是,我在父类中定义了一个有参的构造函数以后,子类中必须要在构造函数中调用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-3-23 16:48
因为子类中的构造函数中第一行都有一句隐式的SUPER()。所以在初始化的时候会先初始化父类的构造函数。
作者:
周建
时间:
2012-3-23 17:55
子类的构造函数第一行都默认有一个Supper()语句,可以不写,自动初始化父类的无参构造函数;
如果一个类没有定义构造函数,系统默认一个无参的构造函数,如果定义了就以定义的为准,在你定义的类中,注释掉了person()后,父类实际上只有一个有参的构造函数,子类调用Supper(),又找不到该函数所以报错
作者:
李啸
时间:
2012-5-22 10:22
本帖最后由 李啸 于 2012-5-22 10:36 编辑
这个帖子发了好长时间了 进才看到 也才想到这个问题 我想知道Java这么设计 在子类实例化的时候为什么先要去实例父类 真的不明白 求解释(推荐版主也回答)
我是第十期的准黑马学员
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2