繁体   English   中英

包私有的Java默认类访问类似于public

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM