黑马程序员技术交流社区

标题: 哪里出错了??? [打印本页]

作者: 张学东    时间: 2012-10-21 10:10
标题: 哪里出错了???
  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 错误


作者: 刘伟平    时间: 2012-10-21 10:23
---------- Java编译 ----------
Test.java:13: 错误: 无法将类 B中的构造器 B应用到给定类型;
        {
        ^
  需要: int
  找到: 没有参数
  原因: 实际参数列表和形式参数列表长度不同
1 个错误

输出完成 (耗时 0 秒) - 正常终止
作者: 廖智    时间: 2012-10-21 10:27
本帖最后由 廖智 于 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);
        }
}
作者: 王自强    时间: 2012-10-21 10:38
  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. }
复制代码

作者: 李润根    时间: 2012-10-21 11:09
要么在class A的构造函数第一行添加super(i);
要么在class B添加一个空参数的构造函数


作者: ssx0101    时间: 2012-10-21 11:42
由于类B的构造函数式有一个参数的,类A继承类B时要在类A的构造函数中使用super(i),这样在类A实例化的时候才能通过传递参数i来调用其父类的构造函数。




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