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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王贺明 中级黑马   /  2015-9-26 01:42  /  548 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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

8 个回复

倒序浏览
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. }
复制代码




回复 使用道具 举报 2 0
Parent1类里没有空参数的构造函数,因为你写了Parent1(String s),系统就不自动添加空参数的了,要自己写。因为找不到所以就报错了
回复 使用道具 举报 1 0
Parent1要这样写是吧
class Parent1 {
    Parent1(  )
         {       }
    Parent1(String s){
        System.out.println(s);
    }
}
回复 使用道具 举报
楼上说的好清楚
回复 使用道具 举报
二楼说的很清楚,可以看看
回复 使用道具 举报
构造函数的参数问题
回复 使用道具 举报
赞楼上赞楼上赞楼上赞楼上赞楼上赞楼上赞楼上
回复 使用道具 举报
二楼说的看懂了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马