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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张学东 中级黑马   /  2012-10-21 10:10  /  1666 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. 我编了下面几行代码:
  2. class B
  3. {
  4. public int i;
  5. B(int i)
  6. {
  7. this.i = i*2;
  8. }
  9. }

  10. class A extends B
  11. {
  12. public static void main(String[] args)
  13. {
  14. A a = new A(2);
  15. }

  16. A(int i)
  17. {
  18. System.out.println(i);
  19. }
  20. }
复制代码
结果编译的时候出错了:
Java\A.java:9: 找不到符号
符号: 构造函数 B()
位置: 类 B
   {
   ^
1 错误

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

5 个回复

倒序浏览
---------- Java编译 ----------
Test.java:13: 错误: 无法将类 B中的构造器 B应用到给定类型;
        {
        ^
  需要: int
  找到: 没有参数
  原因: 实际参数列表和形式参数列表长度不同
1 个错误

输出完成 (耗时 0 秒) - 正常终止
回复 使用道具 举报
本帖最后由 廖智 于 2012-10-21 10:33 编辑

class B
{
        public int i;
        B(int i)
        {
                this.i = i*2;
        }
}

class A extends B
{
        public static void main(String[] args)
        {
                A a = new A(2);
        }
        
        A(int i)
        {
                super(); //-->这里默认有super(),子类构造函数的第一行,默认会有一个super(),但你的父类构造函数中已经定义了一个B(int i)有参数构造函数,空参数构造函数就没有了,所以要自己手动指定一个有参数的构造方法调用父类。
                System.out.println(i);
        }
}

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

回复 使用道具 举报
  1. class B
  2. {
  3.     public int i;
  4.     B(int i)
  5.     {
  6.         this.i = i*2;
  7.     }
  8. }

  9. class A extends B
  10. {
  11.     public A(int i)
  12.     {
  13.         super(i);
  14.         /*
  15.         你不写这句话,系统就会默认写一句 super();
  16.         然而,父类中没有空参数的构造函数,所以报错说找不到
  17.         找不到    构造函数B()
  18.         位置    类B中
  19.         */
  20.         System.out.println(i);
  21.     }
  22.     public static void main(String[] args)
  23.     {
  24.         A a = new A(2);
  25.     }

  26.    
  27. }
复制代码
回复 使用道具 举报
要么在class A的构造函数第一行添加super(i);
要么在class B添加一个空参数的构造函数

回复 使用道具 举报
由于类B的构造函数式有一个参数的,类A继承类B时要在类A的构造函数中使用super(i),这样在类A实例化的时候才能通过传递参数i来调用其父类的构造函数。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马