超类的默认无参数构造函数

时间:2013-06-13 16:36:20

标签: java inheritance constructor

在java教程中,

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

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

任何人都可以向我提供一个示例,其中可能存在编译错误吗?

3 个答案:

答案 0 :(得分:2)

class A
{
    public A(int n)
    {

    }
}

class B extends A
{

}

答案 1 :(得分: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

答案 2 :(得分: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
  }

}