パッケージ宣言をせずにクラス宣言した場合、
そのクラスは「無名パッケージ」に属するクラスとなります。
「無名パッケージ」に属しているクラスには、
「無名パッケージ」に属しているクラスからしかアクセスすることができません。
無名パッケージ内のクラス同士は双方アクセス可能
例えば、以下のプログラムであれば、
Aクラス、Bクラスそれぞれが「無名パッケージ」に属しているため、
インポート宣言無しでも、双方向でアクセス可能です。
public class A(){ public static String strA = "A"; public static void main(String[] args){ System.out.println(strB);//←Bクラスにアクセス可能 } }
public class B(){
public static String strB = "B";
public static void main(String[] args){
System.out.println(strA);//←Aクラスにアクセス可能
}
}
無名パッケージにアクセスできない例
以下のように、明示的にパッケージ宣言をしたCクラスからは、
無名パッケージに属しているAクラス、Bクラスにアクセスすることはできません。
package jp.co.xxx; public class C(){ public static String strC = "C"; public static void main(String[] args){ System.out.println(strA);//←Aクラスにアクセス不可 System.out.println(strB);//←Bクラスにアクセス不可 } }
無名パッケージのクラスにアクセスできない理由
これは、インポート宣言で「無名パッケージ」を指定することができないためです。
構文:「import パッケージ名.クラス名」
↑無名パッケージなので、パッケージ名を指定できない。
逆に、
インポート宣言をすることで、別パッケージに属しているクラスにアクセスすることは可能なので、
以下のように、Aクラス、Bクラスから、Cクラスにアクセスすることは可能です。
import jp.co.xxx.C; public class A(){ public static String strA = "A"; public static void main(String[] args){ System.out.println(strC);//←Cクラスにアクセス可能 } }
import jp.co.xxx.C; public class B(){ public static String strB = "B"; public static void main(String[] args){ System.out.println(strC);//←Cクラスにアクセス可能 } }
コメント