内部 class 只能从方法访问外部 classes 属性
inner class able to access outer classes attributes from method only
请查看这段编译良好的代码:
class OuterClass {
String a = "A";
String b = "B";
String c = "C";
public static class StaticInnerClass {
}
public String stringConCat() {
return a + b + c;
}
}
这正如我所料,因为内部 class 可以访问外部 classes 属性。但是现在当我尝试相同的代码但将外部属性分配给内部属性时,系统会抱怨:
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;
}
}
编译时的error/warning是:Non-static field a
cannot be referenced from a static context.
是否因为在方法 stringConCat()
中您实际上需要一个实例来调用该方法(post 构造函数调用)所以它被允许?然而,在第二个示例中没有真实实例,因此它将其视为静态引用 ?
我读了I thought inner classes could access the outer class variables/methods?,但它仍然没有下沉。有人可以帮忙吗?
关键在您的错误消息中:"Non-static field a cannot be referenced from a static context."
inner classes 可以访问外部class变量,但是你的嵌套class是静态的,不是内部的,变量是不是静态的。要么使变量成为静态变量,要么使嵌套的 class non-static.
请查看这段编译良好的代码:
class OuterClass {
String a = "A";
String b = "B";
String c = "C";
public static class StaticInnerClass {
}
public String stringConCat() {
return a + b + c;
}
}
这正如我所料,因为内部 class 可以访问外部 classes 属性。但是现在当我尝试相同的代码但将外部属性分配给内部属性时,系统会抱怨:
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;
}
}
编译时的error/warning是:Non-static field a
cannot be referenced from a static context.
是否因为在方法 stringConCat()
中您实际上需要一个实例来调用该方法(post 构造函数调用)所以它被允许?然而,在第二个示例中没有真实实例,因此它将其视为静态引用 ?
我读了I thought inner classes could access the outer class variables/methods?,但它仍然没有下沉。有人可以帮忙吗?
关键在您的错误消息中:"Non-static field a cannot be referenced from a static context."
inner classes 可以访问外部class变量,但是你的嵌套class是静态的,不是内部的,变量是不是静态的。要么使变量成为静态变量,要么使嵌套的 class non-static.