2013-10-16 9 views
5

javaのクラス宣言がpublicのデフォルト値はの場合のみ、私はお問い合わせしたいと思いますか?クラス宣言 - publicとdefault

私は、ファイル内にpublicクラスが1つしかなく、そのファイルがクラス名でなければならないことを読んでいます。例えば

Test.java

public class Test { 

} 

しかし、私はクラスで私はpublicクラスを持つことはできませんが、多くのデフォルトクラスを持つことができることを観察しました。例えば

Exam.java

class Exam { 

} 

class Examination { 

} 

なぜそれが私が一つだけpublicクラスを持つことができるということですが、1つのファイル内に多くのデフォルトクラスを持つことができますか?

+0

クラスはpublicまたはpackage private(宣言に変更が加えられていない場合はprivateパッケージ)としてのみ宣言できます。内部クラスまたは静的ネストされたクラスでない限り、クラスは 'private'または' protected'宣言することはできません。パブリッククラスでは、クラス名と同じ名前のファイルにクラスを保存する必要があります。 – Lion

答えて

7

私は1つのパブリッククラスしか持てませんが、1つのファイル内に多くの デフォルトクラスを持つことができるのはなぜですか?

7.6. Top Level Type Declarations

この制限は コンパイル単位あたり最大1つのようなタイプが存在しなければならないことを意味しています。 この制限により、Javaコンパイラ は、パッケージ内の名前付きクラスを簡単に見つけることができます。実際には、多くのプログラマ は、各クラスまたはインターフェイスタイプを別の コンパイル単位で公開されているかどうかにかかわらず、独自のコンパイル ユニットに入れることを選択します。

クラスに修飾子(デフォルト修飾子)がない場合は、同じパッケージからしかアクセスできません。

+2

+1、デフォルトは 'package-private'です。 –

+0

@sᴜʀᴇsʜᴀᴛᴛᴀ常に答えを改善する:)ありがとう。 – Maroun

3

これは別の回答者によって指摘された設計上の決定です。これは、長期的にコードを整理するのに役立ちます。あなたは公共の内部クラスを持つことができます。

関連する問題