我已经看到很多关于访问封闭类的私有成员的问题。但是,我的问题恰恰相反。
如果我(作为示例),则使用以下代码:
public class A {
private String outerString = "silly string";
static class B {
private final A someA = new A();
public void foo() {
String b = someA.outerString ;
}
}
}
我想知道为什么编译?我希望通过我从类A(通过someA.outerString)访问'outerString'实例变量的方式来预测错误。我知道内部类可以通过隐式的“this”引用直接访问封闭的类成员。但是在这里,B类是静态的,因此'this'引用不适用。
答案 0 :(得分:2)
B
是A
的成员,因此可以访问A
个private
字段和方法。
在这种情况下,虽然B
为static
,但它使用A的实例来访问字段A.outerString
。
答案 1 :(得分:0)
static
方法可以通过同一个类实例访问同一个类的private
个成员。此行为也适用于static
类。
static void b(A someA) {
String b = someA.outerString;
}
答案 2 :(得分:0)
<强> 1。 this
仅适用于非静态成员,这是正确的 .....但您未使用 this
但是外部类的实例强>
2。您可以非常好地访问 (顶级)内部静态类中的Outer class private member
。
3。从内到外,从内到外有能够访问彼此的私人成员 .. 唯一差异是其中,non static inner class
具有对外类的隐式引用,对于static inner class
,您必须使用实例进行访问。