In Think in Java, the author says:
You simply leave the keyword "public" outside the class, in which case it has access to the packages . (This class can only be used inside this package.)
To prove this, I create one public class and one non-public class:
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."); } }
But when I call them from another class in one package:
public class InPackageClass { public static void main(String[] args){
The system warns me: An open class should not be accessible from outside its own source file.
/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.
So, here is my question: is access to the package available without public access? And why does Java forbid us to call them from another file in the same package, if this is completely legal?
source share