如果超级构造函数中有参数,则 superclass 的内部 class 的构造函数未定义
The constructor of an inner class of a superclass is undefined if there is argument in the super-constructor
我有一个 class A
,A_sub
是 A
的内部 class。
public class A {
protected class A_sub {
int A_sub_x = 1;
A_sub parent;
A_sub(A_sub obj_A_sub) {
System.out.println("Constructor A.A_sub");
parent = obj_A_sub;
}
}
public A() {
System.out.println("Constructor A");
}
}
然后我有一个 class Main
(它扩展了 A
)和一个方法 main
。 Main
也有一个内部的 class A_sub
(扩展 A.A_sub
)。但是我在 super()
行收到一条错误消息,说“构造函数 A.A_sub() 未定义”。我该如何解决?
class Main extends A{
public Main() {
}
private class A_sub extends A.A_sub{
int A_sub_z;
A_sub(A_sub obj_A_sub) {
super();
System.out.println("Constructor Main.A_sub");
A_sub_z = 3;
}
}
public static void main(String args[]) {
Main obj = new Main();
A_sub obj_sub = obj.new A_sub(null);
System.out.println(obj_sub.A_sub_x);
System.out.println(obj_sub.A_sub_z);
}
}
实际上没有构造函数,因为 A$A_sub.A_sub()
- 您拥有的构造函数带有一个 A_sub
参数。解决这个问题的一种方法是将 Main$A_sub.A_sub
的参数传递给其父级的构造函数:
class Main extends A{
private class A_sub extends A.A_sub{
int A_sub_z;
A_sub(A_sub obj_A_sub) {
super(obj_A_sub);
// Here-^
System.out.println("Constructor Main.A_sub");
A_sub_z = 3;
}
}
// The rest of Main's constructors and methods have been snipped for brevity
}
只需在 class A_sub
中创建一个空构造函数
所以,内classA_sub应该是
protected class A_sub {
int A_sub_x = 1;
A_sub parent;
A_sub(A_sub obj_A_sub) {
System.out.println("Constructor A.A_sub");
parent = obj_A_sub;
}
public A_sub() {
}
}
因为 class Main.A_sub
扩展了 A.A_sub
并且它有非默认构造函数你必须传递所需的参数
private class A_sub extends A.A_sub {
A_sub(A_sub obj_A_sub) {
super(null); // Pass the required argument
//....
}
}
我有一个 class A
,A_sub
是 A
的内部 class。
public class A {
protected class A_sub {
int A_sub_x = 1;
A_sub parent;
A_sub(A_sub obj_A_sub) {
System.out.println("Constructor A.A_sub");
parent = obj_A_sub;
}
}
public A() {
System.out.println("Constructor A");
}
}
然后我有一个 class Main
(它扩展了 A
)和一个方法 main
。 Main
也有一个内部的 class A_sub
(扩展 A.A_sub
)。但是我在 super()
行收到一条错误消息,说“构造函数 A.A_sub() 未定义”。我该如何解决?
class Main extends A{
public Main() {
}
private class A_sub extends A.A_sub{
int A_sub_z;
A_sub(A_sub obj_A_sub) {
super();
System.out.println("Constructor Main.A_sub");
A_sub_z = 3;
}
}
public static void main(String args[]) {
Main obj = new Main();
A_sub obj_sub = obj.new A_sub(null);
System.out.println(obj_sub.A_sub_x);
System.out.println(obj_sub.A_sub_z);
}
}
实际上没有构造函数,因为 A$A_sub.A_sub()
- 您拥有的构造函数带有一个 A_sub
参数。解决这个问题的一种方法是将 Main$A_sub.A_sub
的参数传递给其父级的构造函数:
class Main extends A{
private class A_sub extends A.A_sub{
int A_sub_z;
A_sub(A_sub obj_A_sub) {
super(obj_A_sub);
// Here-^
System.out.println("Constructor Main.A_sub");
A_sub_z = 3;
}
}
// The rest of Main's constructors and methods have been snipped for brevity
}
只需在 class A_sub
中创建一个空构造函数所以,内classA_sub应该是
protected class A_sub {
int A_sub_x = 1;
A_sub parent;
A_sub(A_sub obj_A_sub) {
System.out.println("Constructor A.A_sub");
parent = obj_A_sub;
}
public A_sub() {
}
}
因为 class Main.A_sub
扩展了 A.A_sub
并且它有非默认构造函数你必须传递所需的参数
private class A_sub extends A.A_sub {
A_sub(A_sub obj_A_sub) {
super(null); // Pass the required argument
//....
}
}