Java - 包私有类中的方法可访问性?

10
如果我有一个Java类是包私有的(用"class"而不是"public class"声明),那么内部方法声明为public、protected或包私有,实际上没有什么区别,对吗?那么我应该使用哪个修饰符,或者何时使用哪个?我有点困惑。
2个回答

18
如果我有一个Java类,其访问权限为包范围(使用"class"声明而不是"public class"),那么类内部的方法声明为public、protected或者包范围并没有什么区别,对吗?
也许一开始看起来并没有区别。但是如果你将来声明了一个继承于这个包范围类的'protected' 或 'public' 类,那么原始类成员的可见性就会很重要。
正如@kmccoy所指出的那样,将类声明为final可以消除子类的可能性。
但这只是表面现象。如果您随后决定确实需要创建子类,则可以删除 "final" 关键字 ... 然后您又回到了访问修饰符的选择很重要的情况。
我认为,最重要的是要选择最合适的修饰符...即使现在不是必需的。如果没什么问题,你的修饰符选择应该记录下表示抽象边界的意图。

如果类是 final class SomeClass,那么成员可见性是否重要? - kmccoy
2
如果在未来的重构中移除了final修饰符 :) 请记住,这是软件,“final”并不意味着“一成不变”,它的意思是,“当前编写的类型无法派生子类”。 - Greg Mattes

3

包内类中的公共方法对同一包中的其他类是公开的。但是,私有方法对同一包中的其他类不可访问。


这不回答问题。问题是关于公共 vs 包内私有的区别,而不是私有。 - xdavidliu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接