-2

在java教程中,

http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

您不必为您的类提供任何构造函数,但这样做时必须小心。编译器会自动为任何没有构造函数的类提供无参数的默认构造函数。此默认构造函数将调用超类的无参数构造函数。在这种情况下,如果超类没有无参数构造函数,编译器会报错,因此您必须验证它是否存在。如果你的类没有显式的超类,那么它有一个 Object 的隐式超类,它确实有一个无参数的构造函数。

谁能给我一个例子,这个编译错误可能在哪里?

4

3 回答 3

2
class A
{
    int a;
    A(int a)
    {
        this.a=a;
    }
}

class B extends A
{
    B(int a)
    {
        this.a=a;
    }
}

class C 
{
    public static void main(String args[])
    {
        B obj=new B(20);
        System.out.println("a = "+obj.a);
    }
}


Error:Constructor A in class A cannot be applied to given types;
{
^
required: int
found:no arguments
reason: actual and formal argument lists differ in length
于 2013-06-13T17:23:58.820 回答
2
class A
{
    public A(int n)
    {

    }
}

class B extends A
{

}
于 2013-06-13T16:38:34.903 回答
1

假设你有一Super堂课

class Super {

 // no constructor
 // Java compiler will assign a default constructor
 // Super () {} 

}

和一Child堂课

class Child extends Super {

      public Child() {
          //super(); --> this statement will be inserted by default by Java compiler, even though you don't put it in your code
      }

}

如果Super是这样

class Super {

  Super(int a) {
    // Now this is the only constructor Super class has
    // Java doesn't insert a default constructor now..
  }

}

Child不能没有参数构造函数,因为Super不再有它

class `Child` {

  Child() {
     // super();
     //this will be error since there is no "no-argument" constructor in Super
  }

}
于 2013-06-13T16:42:00.977 回答