为什么我可以访问封闭类引用的私有成员
我已经看到很多关于访问封闭类的私人成员的问题。 但是,我的问题恰恰相反。
如果我(作为示例),以下代码:
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’引用不适用。
B
是A
的成员,因此可以访问A
的private
字段和方法。
在这种情况下,尽管B
是static
,但它使用A的实例来访问字段A.outerString
。
static
方法可以通过同一个类实例访问同一个类的private
成员。 这种行为对于static
类也是一致的。
static void b(A someA) { String b = someA.outerString; }
1.这只适用于非静态成员,这是正确的 …..但你不是使用 this
而是外类的实例。
2.您可以从(顶级)内部静态类 访问 Outer class private member
。
3.从外部到内部,从内部到外部都能够访问彼此的私有成员 。 唯一的区别是, non static inner class
具有对外部类的隐式引用 ,而对于static inner class
您必须使用实例。