ホームページ >Java >&#&チュートリアル >1 つのファイル内の複数のトップレベル Java クラスは外部コードと対話できますか?
Java での複数のクラス宣言: 詳細な説明
Java では、複数のトップレベル クラスを 1 つのファイル内に共存できます。そのうちの 1 つはパブリックとして指定されています。この手法には、内部クラス、ネストされたクラス、または匿名クラスに似た特定の名前がないため、次の 2 つの重要な疑問が生じます。
1.これらのセカンダリ クラスは、コンパイル単位外のコードと対話することが制限されていますか?
Java 言語仕様 (JLS) では、セカンダリ クラスが他のコンパイル単位のコードによって参照されることを禁止する制限は許可されていますが、強制はされていません。同じパッケージ内で。これは、それらをパッケージプライベートとして扱うことができないことを意味します。
2. Java 実装が異なれば、この制限の処理方法も異なりますか?
JLS とは対照的に、Java コンパイラ javac は、外部ファイルと同じ名前を共有しない限り、外部ファイルからのトップレベル クラスの参照を事実上阻止する制限を積極的に適用します。
詳細説明
この制限は、ファイル A のクラスがファイル B のクラスにアクセスしようとしたときに現れます。ファイル B には、ファイル B と同じ名前の別のクラスも含まれています。ただし、ファイル A のクラスがファイル B 内の同じ名前の他のクラスにもアクセスすると、コンパイル エラーは消えます。
図:
FileA.java:
public class FileA { private FileB fileB; }
FileB.java:
public class FileB { private class FileBClass { } }
コンパイル FileA.java だけでは、エラー:
FileA.java:2: cannot find symbol symbol : class FileBClass location: class FileA
これを解決するには、FileA.java も FileB.java を参照するか、FileB.java を参照する必要があります。コンパイルされた
結論
明示的に禁止されていませんが、javac に強制された制限により、外部ファイルが存在するファイルと同じ名前を共有しない限り、外部ファイルからトップレベル クラスを参照することは妨げられます。そのため、ほとんどの場合、この実践は現実的ではありません。
以上が1 つのファイル内の複数のトップレベル Java クラスは外部コードと対話できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。