【问题标题】:Java default class access of package-private works like publicpackage-private 的 Java 默认类访问类似于 public
【发布时间】:2013-03-29 20:43:41
【问题描述】:

正如许多地方所述,一个类产生一个包私有访问级别,这意味着这样的类只能被同一个包的其他人访问。我对包了解不多,但我想知道您在文件开头添加“包 x”就足以提出我的问题。

我制作了一个包含类成分的文件。另一个文件包含

public class cooking{ 
    public static void main(String[] args) {.....

任何地方都没有包声明。尽管如此,我的程序还是成功编译了这两个文件,并且也如此运行。我错过了什么?烹饪课不应该看不到成分吗?

【问题讨论】:

  • 请发布更多主要使用成分的代码,以及成分类。
  • 发布两个类的package 语句。

标签: java class access-modifiers


【解决方案1】:

正如 Java 语言规范中所述,您的类是(该)未命名包的一部分,这就是它们可以相互看到的原因。

http://docs.oracle.com/javase/specs/jls/se7/html/jls-7.html#jls-7.4.2

【讨论】:

    【解决方案2】:

    您的 IDE(如 netbeans 或 eclipse)编译代码,因为这两个类都在同一个项目中,并且它“知道”您指的是那个类。

    【讨论】:

      【解决方案3】:

      类可以在没有导入语句的情况下看到同一目录中的其他类。包是组织代码的方法,本质上只是应用程序文件夹中的目录。所有类都可以看到同一个类中的其他类而无需导入,这是在定义不同的包时,例如您的结构是:

      src
       |
       +- Cooking.java
       |
       +- utilities
           |
           +- Ingredient.java
      

      当然,您的成分文件将以 package utilities; 开头,如果您尝试从烹饪中访问它,则会收到错误消息,除非您在文件中包含 import utilities.Cooking;。包私有只是意味着包(或文件夹)之外的类无法查看或访问文件或其包私有属性。

      【讨论】:

        【解决方案4】:

        如果不给java类添加package语句,那么这些类都在同一个包中=所谓的“默认”包。因此,无论您是否将这些类定义为公共类,这些类都可以相互访问。

        public class A
        

        = 这个类 A 在所有包中可见

        class B
        

        = 这个类 B 只对与 B 同一个包中的类可见

        【讨论】:

          猜你喜欢
          • 2016-04-08
          • 2019-08-08
          • 2011-04-02
          • 1970-01-01
          • 2010-09-21
          • 2010-10-17
          相关资源
          最近更新 更多