Java 私有类中的可见性修饰符有什么区别?

Java 私有类中的可见性修饰符有什么区别?,java,access-modifiers,Java,Access Modifiers,就像标题一样。为什么在私有类中首先允许任何修饰符?私有类在文件外部不可见,因此我们无法访问它们。如果这些类中的可见性很重要,建议使用哪一个?您的私有类仍然可以实现公共接口(或扩展可访问类) 或者只重写toString,等于或hashCode(所有这些都必须是公共的)。一个区别:privateClass.getMethods将只返回公共方法 另一个问题:一些工具,如JAXB,可能正在寻找与公共setter/getter相关的(关于“包私有”类的相同问题):如果我没有弄错的话,您的观点是访问修饰符存

就像标题一样。为什么在私有类中首先允许任何修饰符?私有类在文件外部不可见,因此我们无法访问它们。如果这些类中的可见性很重要,建议使用哪一个?

您的私有类仍然可以实现公共接口(或扩展可访问类)


或者只重写
toString
等于
hashCode
(所有这些都必须是公共的)。

一个区别:privateClass.getMethods将只返回公共方法


另一个问题:一些工具,如JAXB,可能正在寻找与公共setter/getter

相关的(关于“包私有”类的相同问题):如果我没有弄错的话,您的观点是访问修饰符存在于私有类中,因此您可以实现/扩展,并且编译器不允许限制方法的可见性。但是,我仍然不能在文件外使用这些方法,因此所有方法/字段都可以隐式设置为public(这样就不会限制可见性),为什么不能在文件外使用这些方法?您可以让私有类实现
Comparator
Runnable
Collection
,并从方法返回它的实例。调用该方法的代码可以在私有类实例上调用comparerunsize。我可能做错了,但在我的测试中,当私有类实现接口时,当我在另一个文件中检索对象时,编译器不允许我使用该方法(type test.Nested不可见)类型
Test.Nested
不可见,但您可以将其作为
对象
(或
可运行
或其具有的任何接口)键入<代码>对象x=test.methodReturnsMyPrivateInstance();x、 toString()
@请不要直接访问包含类之外的类型,否,但是如果您有
私有类MyComparator implements Comparator
,您可以从
公共Comparator CreateComarator()返回该类的实例
方法,调用方可以将返回的引用分配给类型为
Comparator
的变量。至于第二个变量,这些工具不应该避免私有类吗?您可以使用嵌套的私有类来反序列化xml数据,我是否应该将所有方法/字段设置为public,仅仅是因为某些工具可能需要它?只有当您要使用这些工具时,否则可见性并没有真正的区别