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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我干阿衰 中级黑马   /  2015-5-12 23:17  /  811 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

13.        给定如下一个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();
    }
}
        A.        编译错误:没有找到构造器Child()
        B.        编译错误:没有找到构造器Parent1()
        C.        正确运行,没有输出值
        D.        正确运行,输出结果为:parent2

13 个回复

倒序浏览
这一个多重继承的题,子类会继承父类中的内容,子类在初始化的时候,必须先到父类中去执行父类的初始化动作,所以我觉得应该选择C,
回复 使用道具 举报
感觉选b  继承 如果不写的话 默认 找 空参数的构造函数这里没有空参数的构造函数 应该是b
回复 使用道具 举报
选B。new Child()要找的是无参构造函数,父类中必须有无参构造函数,如果类中有构造方法,jvm就不会给该类加上无参构造函数,必须手动写出来。继承时,类加载会先加载父类的构造方法,所以Parent1中没有无参构造函数,编译错误。
回复 使用道具 举报
为什么不选D呢。new Child()找的是Parent2类中的无参构造函数,Parent2类找的是Parent1中的无参构造函数,Parent1没有,就不执行呗。所以Parent2的无参构造函数没有调用到Parent1,只执行了打印“parent2”。
回复 使用道具 举报
楼主知道正确答案吗?
回复 使用道具 举报
1017161726 发表于 2015-5-13 09:23
为什么不选D呢。new Child()找的是Parent2类中的无参构造函数,Parent2类找的是Parent1中的无参构造函数,P ...

parent2 继承parent1  第一行隐藏super(),所以 parent1找不到就会去parent1找 所以应该是选b
回复 使用道具 举报
我的第一个parent2打成了parent1......好尴尬~
回复 使用道具 举报
xgd6612 发表于 2015-5-13 09:52
parent2 继承parent1  第一行隐藏super(),所以 parent1找不到就会去parent1找 所以应该是选b ...

对的。我搞错了。Parent1中有带参数构造函数就没有了无参构造函数,调用失败了。
回复 使用道具 举报
ZSMAN 中级黑马 2015-5-13 11:04:31
10#
B。父类没有空参构造方法,子类必须手动调用父类其他构造函数~
回复 使用道具 举报
                     代码cv到IDE工具中,一运行就出来结果了偶。楼主。。。
回复 使用道具 举报
答案是应该是B ,想要编译通过可以在类Patent1里面加一个空参数的构造方法。
回复 使用道具 举报
测试了下,应该是b
回复 使用道具 举报
选什么呢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马