Java 如果超类的内部类中有参数,则该类的构造函数是未定义的
我有一个类Java 如果超类的内部类中有参数,则该类的构造函数是未定义的,java,inheritance,constructor,subclass,superclass,Java,Inheritance,Constructor,Subclass,Superclass,我有一个类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;
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\u sub
(它扩展了A.A\u 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
的参数传递给其父构造函数:
类Main扩展了{
私有类A_sub扩展了A.A_sub{
int A_sub_z;
A_sub(A_sub obj_A_sub){
超级(obj_A_sub);
//这里-^
System.out.println(“构造器Main.A_sub”);
A_sub_z=3;
}
}
//为了简洁起见,Main的其余构造函数和方法都被剪掉了
}
只需在类A\u 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() {
}
}
因为类
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
//....
}
}
因为父类中没有默认构造函数,所以出现错误!