多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### [包访问权限 Vs Public 构造器](https://lingcoder.gitee.io/onjava8/#/book/07-Implementation-Hiding?id=%e5%8c%85%e8%ae%bf%e9%97%ae%e6%9d%83%e9%99%90-vs-public-%e6%9e%84%e9%80%a0%e5%99%a8) 当你定义一个具有包访问权限的类时,你可以在类中定义一个 public 构造器,编译器不会报错: ~~~ // hiding/packageaccess/PublicConstructor.java package hiding.packageaccess; class PublicConstructor { public PublicConstructor() {} } ~~~ 有一个 Checkstyle 工具,你可以运行命令**gradlew hiding:checkstyleMain**使用它,它会指出这种写法是虚假的,而且从技术上来说是错误的。实际上你不能从包外访问到这个**public**构造器: ~~~ // hiding/CreatePackageAccessObject.java // {WillNotCompile} import hiding.packageaccess.*; public class CreatePackageAcessObject { public static void main(String[] args) { new PublicConstructor(); } } ~~~ 如果你编译下这个类,会得到编译错误信息: ~~~ CreatePackageAccessObject.java:6:error: PublicConstructor is not public in hiding.packageaccess; cannot be accessed from outside package new PublicConstructor(); ^ 1 error ~~~ 因此,在一个具有包访问权限的类中定义一个**public**的构造器并不能真的使这个构造器成为**public**,在声明的时候就应该标记为编译时错误。