关于JAVA的内部类

时间:2015-01-01 03:16:04

标签: java

我正在学习Java中的内部类,但我编写这段代码,当我编译它时,我收到了这个错误: Error:(84, 23) java: non-static variable this cannot be referenced from a static context

    public class Main {

    class Outer {
        private String string;

        Outer(String s) {
            this.string = s;
        }

        public Inner inner() {
            return new Inner();
        }

        class Inner {
            @Override
            public String toString() {
                return string;
            }
        }
    }

    public static void main(String[] args) {
        Outer outer = new Outer("yang");
      //  System.out.println(outer.inner().toString());
    }
}

我已将内部类更新为此,它可以正常工作。

public class Main {

    static class Outer {
        private String string;

        Outer(String s) {
            this.string = s;
        }

        public Inner inner() {
            return new Inner();
        }

        class Inner {
            @Override
            public String toString() {
                return string;
            }
        }
    }
    public Outer outer(String s){
        return new Outer(s);
    }
    public static void main(String[] args) {
      //  Main main = new Main();
        Outer outer = new Outer("YANG");
        System.out.println(outer.inner().toString());
    }
}

2 个答案:

答案 0 :(得分:5)

尽管名称如此,Outer本身就是一个内部类,因此如果没有Main的实例,就无法构造它。你需要:

Outer outer = new Main().new Outer("yang");

答案 1 :(得分:1)

OuterInner都是内部类。要访问它们,您必须实例化主类,然后您应该实例化内部类。

所以你的代码将是

Outer outer = new Main().new Outer("Yang");

另外refer to this