在java中扩展内部CLSS

在java中扩展内部CLSS,java,inner-classes,Java,Inner Classes,这显示了在创建D时,某个中间构造函数调用的错误。请告诉我如何扩展这些内部类,以及这段代码有什么问题。 谢谢。您必须将C类设置为静态,以便可以从B外部访问它 public class Questions { public static void main(String[] args) { D d = new D(); } } class A { A() { System.out.println("A"); } } class B

这显示了在创建D时,某个中间构造函数调用的错误。请告诉我如何扩展这些内部类,以及这段代码有什么问题。
谢谢。

您必须将C类设置为静态,以便可以从B外部访问它

public class Questions {
    public static void main(String[] args) {

        D d = new D();
    }
}

class A {
    A() {
        System.out.println("A");
    }
}

class B extends A {
    B() {
        System.out.println("B");
    }

    class C {
        C() {
            System.out.println("C");
        }
    }
}

class D extends B.C {
    D() {//compilation error
        System.out.println("D");
    }
}

除了一个理论问题,为什么要这样做?

你必须使C类是静态的,这样才能从B外部访问它

public class Questions {
    public static void main(String[] args) {

        D d = new D();
    }
}

class A {
    A() {
        System.out.println("A");
    }
}

class B extends A {
    B() {
        System.out.println("B");
    }

    class C {
        C() {
            System.out.println("C");
        }
    }
}

class D extends B.C {
    D() {//compilation error
        System.out.println("D");
    }
}

除了一个理论问题,为什么要这样做?

所有非静态内部类都需要引用其外部类的实例。若您想要扩展这样的类,您需要确保将用作基的对象将有其外部对象的实例。所以你可以这样做:

class B extends A {

B () {
    System.out.println("B");
}

static class C {

    C () {
        System.out.println("C");
    }
}
}
和使用

class D extends B.C {
    D(B b) {
        b.super();
        System.out.println("D");
    }
}

所有非静态的内部类都需要引用其外部类的实例。若您想要扩展这样的类,您需要确保将用作基的对象将有其外部对象的实例。所以你可以这样做:

class B extends A {

B () {
    System.out.println("B");
}

static class C {

    C () {
        System.out.println("C");
    }
}
}
和使用

class D extends B.C {
    D(B b) {
        b.super();
        System.out.println("D");
    }
}

如果你想从类的外部扩展一个内部类,那么它就不应该是一个内部类。如果我被迫将它保留为一个内部类,我还有什么方法可以扩展它吗?如果你想从类的外部扩展一个内部类,那么它就不应该是一个内部类。如果我被迫将它保持为一个内部类,有没有一种方法可以继续扩展它?