Java 实际上是“;没有公共类”;可在其包内访问?

Java 实际上是“;没有公共类”;可在其包内访问?,java,Java,在“用Java思考”一文中,作者说: 您只需将“public”关键字保留在类之外,在这种情况下,它具有包访问权限。(该类只能在该包中使用。) 为了证明这一点,我创建了一个公共类和一个非公共类: package com.ciaoshen.thinkinjava.chapter7; import java.util.*; //My public class public class PublicClass { //default constructor public PublicC

在“用Java思考”一文中,作者说:

您只需将“public”关键字保留在类之外,在这种情况下,它具有包访问权限。(该类只能在该包中使用。)

为了证明这一点,我创建了一个公共类和一个非公共类:

package com.ciaoshen.thinkinjava.chapter7;
import java.util.*;

//My public class
public class PublicClass {
    //default constructor
    public PublicClass(){
        System.out.println("Hello, I am PublicClass.");
    }
}

//Non public class
//It should be package reachable
class PackageReachableClass {
    //default constructor
    PackageReachableClass(){
        System.out.println("Hi, I am PackageReachableClass.");
    }
}
但是当我从同一个包中的另一个类调用它们时:

public class InPackageClass {

/**
 *  MAIN
 *  @param args void
 */
public static void main(String[] args){
    //pubic class can be reached from anywhere
    PublicClass newPublicClass=new PublicClass();
    //non-public-class should be accessable in the same package
    PackageReachableClass newPackageReachableClass =new PackageReachableClass();
}
}
系统警告我:不应从其自身源文件之外访问no public类。

/Users/Wei/java/com/ciaoshen/thinkinjava/chapter7/InPackageClass.java:22: warning: auxiliary class PackageReachableClass in ./com/ciaoshen/thinkinjava/chapter7/PublicClass.java should not be accessed from outside its own source file
        PackageReachableClass newPackageReachableClass =new PackageReachableClass();
        ^
/Users/Wei/java/com/ciaoshen/thinkinjava/chapter7/InPackageClass.java:22: warning: auxiliary class PackageReachableClass in ./com/ciaoshen/thinkinjava/chapter7/PublicClass.java should not be accessed from outside its own source file
        PackageReachableClass newPackageReachableClass =new PackageReachableClass();
                                                            ^
2 warnings
Hello, I am PublicClass.
Hi, I am PackageReachableClass.

所以我的问题来了:NoPublic类仍然可以访问包吗?如果这是完全合法的,为什么Java禁止我们从同一个包中的另一个文件调用它们呢?

这只是一个警告,您已经定义了一个

PublicClass.java中的辅助类PackageRachableClass

这意味着您有一个包含2个类的Java文件,这是对的。(我的重点)

每个Java源文件都包含一个公共类或接口。当private类和接口与公共类关联时,可以将它们与公共类放在同一源文件中。公共类应该是文件中的第一个类或接口


要正确测试您的包私有类,请根据它们的类名将这两个类分成不同的文件,即
PublicClass.java
packageRachableClass.java

是它自己的文件中的
packageRachableClass
,例如
packageRachableClass.java
?这是一个警告。这意味着你可以这样做,但这可能表明你做错了。@cricket\u 007不,
packagerachablclass
PublicClass
在同一个名为
PublicClass.java
的文件中。我正试图从packageClass.java中的另一个文件
调用它们。只需将这个
packagerachableClass
放入packagerachableClass.java文件中,就可以访问没有公共类的包了吗?试试看?为什么Java不允许我们从同一个包中的另一个文件调用它们呢?答案不要重复。如果您有新的内容要添加,请添加到副本中的现有答案。此问题是关于包私有的。这个答案是关于辅助课的。这个答案就是如何解释警告并减轻它。因此,我不认为它是重复的。这个问题被误导了,因为一开始的示例代码不正确(或误导)。一旦该示例代码被“修复”,就不会有任何混淆了。因此,问题的答案是解决混淆。所有这些仍然没有理由重复答案。谢谢你们的回答。我只是没有发现这样一个题为“什么是辅助类”的问题:p@weiShen真正地因为谷歌搜索“辅助类”会给出准确的第一个结果。用谷歌搜索你的错误/警告以备将来参考。