Java 默认访问修饰符

使用默认访问(default access)修饰符声明的变量和方法,对同一个包内的类可见,包外的任何类(包括其子类)均不可见。

如下,Father类中的属性name是包内私有的:

Java 默认访问修饰符_第1张图片

 在同一包下的子类/其他类可见:

Java 默认访问修饰符_第2张图片 Java 默认访问修饰符_第3张图片

 在另一包下的子类/其他类中不可见,提示“……不为public,无法从外部软件包访问”:

Java 默认访问修饰符_第4张图片 Java 默认访问修饰符_第5张图片


 然而,在另一个项目的同名包中,却可以访问该包下的默认变量:

Java 默认访问修饰符_第6张图片我把之间的项目打包导入到新的项目中,创建了一个同包名的软件包。Java就把它们当成一个包了,实际上当然并不是,这就破坏了包的封装性。


为了避免上面这种冒充的现象,Java有了运行时包的概念。由同一个类加载器加载属于同包的类组成了运行时包,决定两个类是不是同一运行时包要看它们的包名是否相同,还要看加载器是否相同。而只有属于同一运行时包的类才能访问默认权限修饰符的类和其成员。

你可能感兴趣的:(java,jvm)