私有的嵌套类(内部或静态)是不是可能具有具有公共访问权限的方法?

Posted

技术标签:

【中文标题】私有的嵌套类(内部或静态)是不是可能具有具有公共访问权限的方法?【英文标题】:Does nested class (inner or static) that is private may has method with public acesses?私有的嵌套类(内部或静态)是否可能具有具有公共访问权限的方法? 【发布时间】:2020-04-01 06:49:46 【问题描述】:

我正在为 Java 初学者阅读一本书。我看到了一个使用公共方法声明私有嵌套内部类的示例。有人可以解释一下含义吗?我如何确定私有嵌套类(静态/内部)方法应该是私有的还是公共的?

【问题讨论】:

【参考方案1】:

私有嵌套类仅在其封闭类内部可见,并且封闭类(和其他嵌套类)可以访问其私有方法。

因此,将它们的方法设为公共或私有对编译器来说并不重要,除非嵌套类当然扩展了基类或实现了接口,因此 必须 将其覆盖方法设为公共.公开方法也可能是必要的,因为它们是使用反射调用的(例如,如果它的实例被序列化为 JSON 或 XML,或者如果它们在 JSP 中访问)。

我倾向于使用与未嵌套类相同的规则来选择公开和私有的内容。这使得(对我来说)更清楚一些私有方法不是其公共 API 的一部分,因此不应该在嵌套类本身之外使用。如果我将嵌套类重构为***类,我不需要更改任何内容。

【讨论】:

当说,“和封闭类(和其他嵌套类)可以访问它的私有方法”。我有点困惑,无法理解你的意思和其他嵌套类。你能澄清一下,这样我会感觉更舒服:) 封闭类 Foo 可以有两个嵌套类 Foo.Bar 和 Foo.Baz。 Bar 可以访问 Baz 的私有成员,反之亦然。 @Eitanos30 'private' 基本上意味着:您正在编辑的这个文件中的所有代码都可以看到您声明为私有的这个方法/字段并调用它(方法)或读写它(字段) ;所有其他代码(因此在任何其他 .java 源文件中编写的所有代码)都不能。 @rzwitserloot 这并不完全正确。在同一个文件中定义的两个***类不能访问另一个的私有成员。 @JB Nizet,java 中是否可以有两个***类?

以上是关于私有的嵌套类(内部或静态)是不是可能具有具有公共访问权限的方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何实现只能由其封闭类创建的密封公共嵌套类?

静态内部类(静态嵌套类或嵌套类)

具有公共getter的抽象属性,可以在具体类中定义私有setter吗?

成员类访问修饰符

java 多线程-单例模式

具有 Spring Security 的公共和私有 REST API