A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 苏周周 中级黑马   /  2014-5-19 22:21  /  1368 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 苏周周 于 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();

    }

}  
求解为什么编译错误啊?大神们

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

8 个回复

倒序浏览
本帖最后由 szsycwb 于 2014-5-19 22:36 编辑

子类任何构造方法,总会默认隐式调用父类空参数构造方法。
父类中没有空参数的构造方法,所以会出错。
解决办法:
1.在父类中增加一个空参数构造方法。
Parent1(){}
2.在子类Parent2的构造方法第一行调用父类有一个参数的构造方法。
super(......);

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报
你代码的问题,我已在下面的代码中加注释说明了错误原因,以及解决方案,请看下面的代码中的注释:
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();

    }

}  

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
貌似楼上正解
回复 使用道具 举报
#因为本来类都有默认Person()构造器的,但是当你自己定义了构造器后,默认构造器就不在了,所以Person2()就不能这么写了,他必须继承父类的构造函数,但是父类的无参构造没有了,所以只要在Person1()在增加一个无参构造函数就可以了#
回复 使用道具 举报
More 来自手机 中级黑马 2014-5-20 08:19:22
地板
要在Parent1中添加一个无参数构造器,因为在继承过程中,Parent2的无参数构造器会默认去调用其父类的无参数构造器,所以会报错
回复 使用道具 举报
茂子 中级黑马 2014-5-20 08:31:26
7#
jsjchenlong 发表于 2014-5-19 23:04
你代码的问题,我已在下面的代码中加注释说明了错误原因,以及解决方案,请看下面的代码中的注释:
class P ...

解释详细,赞一个……
回复 使用道具 举报
喜爱 高级黑马 2014-5-20 09:07:22
8#
Parent1没有无参的构造器,Parent2是Parent1的子类,在创建Parent2对象的时候,会默认调用父类的无参的构造器,而Parent1中没有无参的构造器。就会有错误!
回复 使用道具 举报
赵京 中级黑马 2014-5-20 09:42:56
9#
这是一道考试吗
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马