黑马程序员技术交流社区

标题: 为什么会是选B呢? [打印本页]

作者: 王贺明    时间: 2015-9-26 01:42
标题: 为什么会是选B呢?
  1. class Parent1 {
  2.     Parent1(String s){
  3.         System.out.println(s);
  4.     }
  5. }
  6. class Parent2  extends Parent1{
  7.     Parent2(){
  8.         System.out.println("parent2");
  9.     }
  10. }
  11. public class Child extends Parent2 {
  12.     public static void main(String[] args) {
  13.         Child child = new Child();
  14.     }
  15. }
复制代码


        13.        给定如下一个Java源文件Child.java,编译并运行Child.java,以下结果正确的是( )

A.        编译错误:没有找到构造器Child()
B.        编译错误:没有找到构造器Parent1()
C.        正确运行,没有输出值
D.        正确运行,输出结果为:parent2

作者: Synaric    时间: 2015-9-26 07:48
Child类没有定义Child的构造函数,编译器为Child添加了默认的构造函数Child()。
在执行Child child = new Child();时,Child的构造函数被调用,由于Child是Parent2子类,Child构造过程中自动构造父类Parent2,即调用Parent2()。Parent2又是Parent1的子类,以此类推,编译器期望一个Parent1()构造函数,但是代码中定义了Parent1(String s);导致编译器不会为Parent1添加默认构造Parent1(),所以会报错。

实际执行效果:
Child.java:7: 错误: 无法将类 Parent1中的构造器 Parent1应用到给定类型;
    Parent2(){
             ^
  需要: String
  找到: 没有参数
  原因: 实际参数列表和形式参数列表长度不同
1 个错误
修改代码如下所示,你可以看到初始化的过程

  1. class Parent1 {
  2.     Parent1(){
  3.         System.out.println("parent1");
  4.     }
  5. }
  6. class Parent2  extends Parent1{
  7.     Parent2(){
  8.         System.out.println("parent2");
  9.     }
  10. }
  11. public class Child extends Parent2 {
  12.         Child(){
  13.         System.out.println("child");       
  14.         }
  15.     public static void main(String[] args) {
  16.         Child child = new Child();
  17.     }
  18. }
复制代码





作者: 安仔    时间: 2015-9-26 10:45
Parent1类里没有空参数的构造函数,因为你写了Parent1(String s),系统就不自动添加空参数的了,要自己写。因为找不到所以就报错了
作者: 刘晟伟    时间: 2015-9-26 13:49
Parent1要这样写是吧
class Parent1 {
    Parent1(  )
         {       }
    Parent1(String s){
        System.out.println(s);
    }
}
作者: Jared    时间: 2015-9-26 14:42
楼上说的好清楚
作者: chenguoyu520    时间: 2015-9-26 14:48
二楼说的很清楚,可以看看
作者: 不隆卡    时间: 2015-9-26 15:32
构造函数的参数问题
作者: cuijinghao    时间: 2015-9-28 00:01
赞楼上赞楼上赞楼上赞楼上赞楼上赞楼上赞楼上
作者: 郭潮潮    时间: 2015-9-28 15:17
二楼说的看懂了




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