实现CorporateService的CorporateServiceImpl类应选用何种访问修饰符?
关于CorporateServiceImpl类的访问修饰符选择
首先要明确一个Java语法规则:顶级类(非内部类)不能使用protected修饰,这会导致编译错误,所以你的这个想法本身是不可行的。
回到你的场景:已知该实现类绝不会在包外被使用,且通过接口调用其方法,正确的选择是使用默认访问修饰符(也就是不写任何修饰符),理由如下:
- 遵循最小权限原则:默认修饰符的类仅对同包内的类可见,完全符合“绝不会在包外使用”的要求,避免了不必要的暴露
- 满足包内使用需求:同包内的其他类可以正常访问和使用这个实现类
- 契合面向接口编程的设计:包外代码只需要依赖
CorporateService接口即可,无需知晓具体实现类的存在,降低了耦合度
如果误用public修饰,会导致这个本应被隐藏的实现类对所有包可见,违反了你的设计初衷,也增加了不必要的维护风险。
内容的提问来源于stack exchange,提问作者Rejaul Karim
相关产品推荐
相关产品推荐

