Java中私有静态嵌套类中的访问修饰符
Posted
技术标签:
【中文标题】Java中私有静态嵌套类中的访问修饰符【英文标题】:Access modifiers inside a private static nested class in Java 【发布时间】:2011-05-03 18:44:04 【问题描述】:我在 Java 中有一个“私有静态”嵌套类。这个类中的字段和方法的访问修饰符有什么意义?我已经尝试过公开和私有,但对我的应用程序没有影响。
public class MyList<T>
private static class Node // List node
private Object item;
private Node next;
private Node prev;
private Node(Node next)
this.next = next;
private static Node doStuff()
【问题讨论】:
你能发布你的代码以及你的假设吗 【参考方案1】:由于是嵌套类,Node
中的所有内容都可以通过MyList<T>
访问,无论访问修饰符如何;因为它是一个私有嵌套类,所以在 Node
中首先声明的任何内容都不会在 MyList<T>
之外可见。
因此,访问修饰符可能很重要的一种情况是覆盖超类方法的方法(例如toString()
)。您不能降低被覆盖方法的可见性。 toString()
必须始终声明为 public 才能编译类。
还需要注意的是,当外部类访问私有成员时,编译器会创建一个合成方法(我相信是包作用域)。此合成方法仅在嵌套类的 .class 文件中可见。
【讨论】:
好答案。我要补充一点,只有当内部类不是private
时,内部类的修饰符才重要。
“当外部类访问私有成员时,编译器会创建一个合成方法”。当仅从外部类访问静态嵌套类的private static
成员时,它是否创建合成方法?假设所有静态成员(包括静态嵌套类的成员)都在编译时解析。
@andrybak Java 编译器可以识别内部私有成员何时被外部类访问,无论它是否是静态的。它仅在需要时创建合成访问器方法。
@ILMTitan 我明白,我的问题是关于在外部类中使用 仅静态 成员时是否创建合成访问器。
@ILMTitan 我使用字节码反编译器检查了我的问题。事实上,编译器确实会生成合成访问器私有静态变量。【参考方案2】:
两种嵌套类:1.静态(嵌套类)和2.非静态(也叫内部类)
现在,外部类MyList
可以访问内部类Node
的所有成员,但是当您想要限制一些外部类访问它。
有趣的阅读:Source1,Source2
【讨论】:
以上是关于Java中私有静态嵌套类中的访问修饰符的主要内容,如果未能解决你的问题,请参考以下文章