ホームページ >Java >&#&チュートリアル >1 つのファイル内の複数のトップレベル Java クラスは外部コードと対話できますか?

1 つのファイル内の複数のトップレベル Java クラスは外部コードと対話できますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-06 04:31:10214ブラウズ

Can Multiple Top-Level Java Classes in One File Interact with External Code?

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.javaFileB.java を参照するか、FileB.java を参照する必要があります。コンパイルされた

結論

明示的に禁止されていませんが、javac に強制された制限により、外部ファイルが存在するファイルと同じ名前を共有しない限り、外部ファイルからトップレベル クラスを参照することは妨げられます。そのため、ほとんどの場合、この実践は現実的ではありません。

以上が1 つのファイル内の複数のトップレベル Java クラスは外部コードと対話できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。