Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果超类的内部类中有参数,则该类的构造函数是未定义的_Java_Inheritance_Constructor_Subclass_Superclass - Fatal编程技术网

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
            //....
        }
    }

因为父类中没有默认构造函数,所以出现错误!