首页 > 解决方案 > 如果超构造函数中有参数,则超类内部类的构造函数是未定义的

问题描述

我有一个类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.A_sub() 未定义”这一行收到一条错误消息。我怎样才能解决它?AmainMainA_subA.A_subsuper()

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);

    }
}

标签: javainheritanceconstructorsubclasssuperclass

解决方案


真的没有构造函数,因为A$A_sub.A_sub()你拥有的构造函数需要一个A_sub参数。解决此问题的一种方法是将Main$A_sub.A_sub's 参数传递给其父构造函数:

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
}

推荐阅读