Java 无法实例化内部类

Java 无法实例化内部类,java,Java,这是我的代码: public class A { int age; void Do() { System.out.println("..."); } class B extends A { } public static void main(String[] args) { B b=new B(); } } 错误位于: new B(); 为什么??为什么不正确?您将B声明为A的内部类,因此如果不提

这是我的代码:

public class A {
    int age;

    void Do() {
        System.out.println("...");
    }

    class B extends A {
    }

    public static void  main(String[] args) {
        B b=new B();
    }
}
错误位于:

new B();

为什么??为什么不正确?

您将
B
声明为
A
的内部类,因此如果不提供封闭类
A
的实例,就无法实例化它

您可以将B的定义移到A之外,以使代码正常工作:

class B extends A
{

}

public class A
{
    int age;

    void Do()
    {
     System.out.println("...");
    }

    public static void  main(String[]args)
    {
        B b = new B();
    }
}
或者您可以保持类结构不变,但创建A的实例以创建B的实例:

B b = new A().new B();

您将
B
声明为
A
的内部类,因此如果不提供封闭类
A
的实例,就无法实例化它

您可以将B的定义移到A之外,以使代码正常工作:

class B extends A
{

}

public class A
{
    int age;

    void Do()
    {
     System.out.println("...");
    }

    public static void  main(String[]args)
    {
        B b = new B();
    }
}
或者您可以保持类结构不变,但创建A的实例以创建B的实例:

B b = new A().new B();

因为你的类B是A的内部类,在你的例子中你有递归关系。所以你应该使B静态更多信息见java文档一个内部类总是有一个外部类实例作为的内部类
B
是一个内部类,但您没有提供
A
的实例,因为您的类B是A的内部类,并且在您的案例中有递归关系。因此您应该使B静态。有关更多信息,请参阅java文档内部类始终有一个外部类实例作为的内部类
B
是一个内部类,但您尚未提供
A