为什么我不能访问Java中的内部类?

Rog*_*des 4 java inner-classes

我在使用Java中的嵌套类时遇到了麻烦,有谁知道为什么Java不允许我这样做?

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

    public static void main(String[] args){
         A a = new A();
         B b = new B();
    }
} 
Run Code Online (Sandbox Code Playgroud)

Vic*_*748 8

因为您尝试从静态方法访问非静态内部类.

第一个解决方案是将你的内部类B改为static:

public class A{
    private static class B {
        public B() {
            System.out.println("class B");
        }
    }

    public static void main(String[] args){
         A a = new A();
         B b = new B();
    }
}
Run Code Online (Sandbox Code Playgroud)

一个static内部类是从任何地方访问,但非静态的,需要你的容器类的一个实例.

另一种解决方案是:

A a = new A();
B b = a.new B();
Run Code Online (Sandbox Code Playgroud)

这将使您更好地理解内部类如何在Java中工作:http://www.javaworld.com/article/2077411/core-java/inner-classes.html


Gur*_*eez 7

A a = new A();
B b = a.new B();
Run Code Online (Sandbox Code Playgroud)

可以解决你的问题

你使用私有内部类.你怎么能在A类之外获得实例?

public class JustForShow {
    public class JustTry{

        public JustTry() {
            System.out.println("Initialized");
        }
    }
    public static void main(String[] args) {
        JustForShow jfs = new JustForShow();
        JustTry jt = jfs.new JustTry();
    }
}
Run Code Online (Sandbox Code Playgroud)