黑马程序员技术交流社区

标题: 如题,求解 [打印本页]

作者: 我干阿衰    时间: 2015-5-12 23:17
标题: 如题,求解
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

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

parent2 继承parent1  第一行隐藏super(),所以 parent1找不到就会去parent1找 所以应该是选b
作者: xgd6612    时间: 2015-5-13 09:55
我的第一个parent2打成了parent1......好尴尬~
作者: 1017161726    时间: 2015-5-13 09:58
xgd6612 发表于 2015-5-13 09:52
parent2 继承parent1  第一行隐藏super(),所以 parent1找不到就会去parent1找 所以应该是选b ...

对的。我搞错了。Parent1中有带参数构造函数就没有了无参构造函数,调用失败了。

作者: ZSMAN    时间: 2015-5-13 11:04
B。父类没有空参构造方法,子类必须手动调用父类其他构造函数~
作者: Always,    时间: 2015-5-13 11:25
                     代码cv到IDE工具中,一运行就出来结果了偶。楼主。。。

作者: hzhzhen    时间: 2015-5-13 12:11
答案是应该是B ,想要编译通过可以在类Patent1里面加一个空参数的构造方法。
作者: mmakun    时间: 2015-5-13 14:30
测试了下,应该是b
作者: 柒仴、看雲佉    时间: 2015-5-13 22:33
选什么呢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2