我一直在读这本书,当我读到项目22:赞成非静态的静态成员类时,我对这个观点感到困惑,静态成员类可以访问封闭类的成员吗?
静态成员类可以用Java评估封闭类的成员吗?
是的他们可以.这很容易检查:
public class Example { private static String foo = "foo"; private String bar; private Example() { this.bar = "bar"; } static class Inner { static void check() { System.out.println(foo); System.out.println(new Example().bar); } } public static final void main(String[] args) { Inner.check(); } }
上面编译,并输出"foo"然后"bar",表明:
Inner
可以访问私有静态字段foo
.
Inner
可以访问私有Example
构造函数.
Inner
可以访问私有实例字段bar
.
的原因,他们可以访问的是嵌套类是外围类的成员(见JLS§8.1.3,就像任何其他成员(例如,封装类的成员函数),因此它有访问私有封闭类的一部分就像封闭类的方法成员一样.
与内部类(非static
成员类)不同,该类没有隐式链接到封闭类的封闭实例(没有隐式链接到a this
).因此,要访问特定于实例的字段或方法,它必须创建一个实例(如上所述,当我们想要访问时bar
),否则它没有实例可供使用.