[英]Java default class access of package-private works like public
如在许多地方所述,一个类产生一个程序包专用访问级别,这意味着只有相同的程序包,此类才能被其他人访问。 我对软件包的了解不多,但是我想知道您在文件的开头添加“ package x”已经足够提出我的问题了。
我已经用类成分制作了文件。 另一个文件包含
public class cooking{
public static void main(String[] args) {.....
任何地方都没有包声明。 尽管如此,我的程序仍成功编译了这两个文件,并且也可以运行。 我想念什么? 烹饪班不应该看不到配料吗?
您的IDE(如netbeans或eclipse)将编译代码,因为这两个类都在同一个项目中,并且它“知道”您的意思是该类。
在没有导入语句的情况下,类可以查看同一目录中的其他类。 包是组织代码的方法,本质上只是组织应用程序文件夹中的目录。 所有类都可以看到同一类中的其他类,而无需导入,这是在定义了不同的包时,例如您的结构是:
src
|
+- Cooking.java
|
+- utilities
|
+- Ingredient.java
当然,您的成分文件将以package utilities;
作为开头package utilities;
并且,如果您尝试从烹饪中访问它,除非您有import utilities.Cooking;
否则都会收到错误消息import utilities.Cooking;
在文件中。 Package-private只是意味着包(或文件夹)外部的类无法查看或访问文件或其Package-private属性。
如果不向Java类添加package语句,则这些类位于同一包=所谓的“默认”包中。 因此,无论您是否将这些类定义为公共类,这些类都可以相互访问。
public class A
=此类A在所有包装中均可见
class B
=此类B仅在与B相同的程序包中的类可见
如Java语言规范中所述,您的类是一个(未命名)包的一部分,这就是为什么它们可以互相看到的原因。
http://docs.oracle.com/javase/specs/jls/se7/html/jls-7.html#jls-7.4.2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.