请查看编译好的代码:
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?但它仍然没有下沉。有人可以帮忙吗?
答案 0 :(得分:2)
密钥在您的错误消息中:“无法从静态上下文引用非静态字段a。”
内部类可以访问外部类变量,但是您的嵌套类是静态的,而不是内部的,并且变量不是静态的。要么使变量成为静态,要么使嵌套类非静态。