黑马程序员技术交流社区
标题:
为什么编译会错误?求解
[打印本页]
作者:
苏周周
时间:
2014-5-19 22:21
标题:
为什么编译会错误?求解
本帖最后由 苏周周 于 2014-5-23 21:54 编辑
给定如下一个Java源文件Child.java,编译并运行Child.java
class Parent1 {
Parent1(String s){
System.out.println(s);
}
}
class Parent2 extends Parent1{
Parent2(){
System.out.println("parent2");
}
}
public class Child extends Parent2 {
public static void main(String[] args) {
Child child = new Child();
}
}
求解为什么编译错误啊?大神们
作者:
szsycwb
时间:
2014-5-19 22:32
本帖最后由 szsycwb 于 2014-5-19 22:36 编辑
子类任何构造方法,总会默认隐式调用父类空参数构造方法。
父类中没有空参数的构造方法,所以会出错。
解决办法:
1.在父类中增加一个空参数构造方法。
Parent1(){}
2.在子类Parent2的构造方法第一行调用父类有一个参数的构造方法。
super(......);
作者:
jsjchenlong
时间:
2014-5-19 23:04
你代码的问题,我已在下面的代码中加注释说明了错误原因,以及解决方案,请看下面的代码中的注释:
class Parent1 {
Parent1(String s){
System.out.println(s);
}
}
class Parent2 extends Parent1{
Parent2(){ //这里的问题是因为又一个隐藏的代码super();
//这个super()是默认要调用Parent1类里的一个无参构造函数
//由于你的Parent1类中没有,所以编译失败;
//解决这问题,就是在Parent1类中加一个无参的构造方法就行了
System.out.println("parent2");
}
}
public class Child extends Parent2 {
public static void main(String[] args) {
Child child = new Child();
}
}
作者:
liang090214
时间:
2014-5-19 23:17
貌似楼上正解
作者:
郝义涛
时间:
2014-5-19 23:38
#因为本来类都有默认Person()构造器的,但是当你自己定义了构造器后,默认构造器就不在了,所以Person2()就不能这么写了,他必须继承父类的构造函数,但是父类的无参构造没有了,所以只要在Person1()在增加一个无参构造函数就可以了#
作者:
More
时间:
2014-5-20 08:19
要在Parent1中添加一个无参数构造器,因为在继承过程中,Parent2的无参数构造器会默认去调用其父类的无参数构造器,所以会报错
作者:
茂子
时间:
2014-5-20 08:31
jsjchenlong 发表于 2014-5-19 23:04
你代码的问题,我已在下面的代码中加注释说明了错误原因,以及解决方案,请看下面的代码中的注释:
class P ...
解释详细,赞一个……
作者:
喜爱
时间:
2014-5-20 09:07
Parent1没有无参的构造器,Parent2是Parent1的子类,在创建Parent2对象的时候,会默认调用父类的无参的构造器,而Parent1中没有无参的构造器。就会有错误!
作者:
赵京
时间:
2014-5-20 09:42
这是一道考试吗
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2