我有一个A
类,而A_sub
是A
的内部类。
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");
}
}
然后我有一个类Main
(扩展了A
)和一个方法main
。 Main
还有一个内部类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);
}
}
答案 0 :(得分:1)
实际上没有像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
}
答案 1 :(得分:0)
只需在类A_sub中创建一个空的构造函数
因此,内部类A_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() {
}
}
答案 2 :(得分:0)
由于类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
//....
}
}