内部类只能从方法访问外部类属性

时间:2016-01-07 00:42:38

标签: java inner-classes

请查看编译好的代码:

class OuterClass {

    String a = "A";
    String b = "B";
    String c = "C";


    public static class StaticInnerClass {

    }

    public String stringConCat() {
        return a + b + c;
    }
}

这是我所期望的,因为内部类可以访问外部类属性。但是现在当我尝试相同的代码但为内部属性分配外部属性时,系统会抱怨:

class OuterClass {

    String a = "A";
    String b = "B";
    String c = "C";


    public static class StaticInnerClass {
        String x = a; //this can not be done, why ?
    }

    public String stringConCat() {
        return a + b + c;
    }
}

编译时的错误/警告是:无法从静态上下文引用非静态字段a

是因为在方法stringConCat()中你实际上需要一个实例来调用方法(post构造函数调用)所以允许它?然而,在第二个例子中没有真实的实例,因此它将它视为静态引用?

我读过I thought inner classes could access the outer class variables/methods?但它仍然没有下沉。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

密钥在您的错误消息中:“无法从静态上下文引用非静态字段a。”

内部类可以访问外部类变量,但是您的嵌套类是静态的,而不是内部的,并且变量不是静态的。要么使变量成为静态,要么使嵌套类非静态。