为什么这段代码不能编译?

Rob*_*777 0 java inheritance constructor

我试图理解为什么这段代码编译:

public class A {
}

public class B extends A {
  public B() {
  }
}
Run Code Online (Sandbox Code Playgroud)

虽然这段代码没有:

public class A {
  public A(int n) {
  }
}

public class B extends A {
  public B() {
  }
}
Run Code Online (Sandbox Code Playgroud)

我的意思是,在这两种情况下,A类都没有空白构造函数吗?如果是这样,为什么它不起作用?

提前致谢

Per*_*ror 6

当超类只有带args的构造函数时,你需要从你的子类显式调用你的超类的构造函数,如下所示.

public B() {
    super(2);// passing an int value to your super class cons
}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,A类都没有空白构造函数吗?

不.如果您声明了构造函数,那么编译器将不包含默认构造函数,因此class A在情况2中您没有默认的no-args构造函数,并且您必须从子类构造函数显式地进行超级调用.