【发布时间】:2015-05-19 20:53:37
【问题描述】:
我知道这是一个重复的问题,但我想以一种非常具体的方式提出这个问题,以澄清一个非常重要的问题。主要问题是:除了访问包含类中的私有静态字段之外,当一个是静态嵌套类而另一个是常规顶级类时,其他相同的类之间是否有任何区别?
// ContainingClass.java
public class ContainingClass {
private static String privateStaticField = "";
static class ContainedStaticClass {
public static void main(String[] args) {
ContainingClass.privateStaticField = "new value";
}
}
}
// OutsideClass.java
public class OutsideClass {
public static void main(String[] args) {
ContainingClass.privateStaticField = "new value"; // DOES NOT COMPILE!!
}
}
换句话说:ContainedStaticClass 可以访问或执行的操作与 OutsideClass 可以访问或执行的操作之间的唯一区别是 OutsideClass 无法直接访问 ContainingClass.privateStaticField 吗?或者是否还有其他不常讨论或遇到的细微差异?
【问题讨论】:
-
我无法完全确认,但据我所知,您的问题的答案是:不,没有其他区别。
-
我可能错了,但我记得在某处读过非静态内部类对外部类有隐式引用,但静态内部类没有。
-
@Naveed,我将不得不做更多的研究。但是,我很确定您正在考虑非静态方法对调用它们的对象具有隐式引用,而静态方法没有说引用,因为它们属于类而不是任何单个实例。换句话说:您可以在非静态方法中使用“this”关键字,但不能在静态方法中使用。