44

publicクラスの前に書かないと、のように機能することに気付きましたpublic class。理解できない どうして?publicクラスを、privateまたはとして宣言しないと、エラーが表示されるはずprotectedです。しかし、それはうまくいきます。理由は何ですか?

4

9 に答える 9

48

クラスの前にパブリックを書かないと、パブリッククラスと同じように機能することに気付きました。

いいえ、そうではありません。public でない限り、クラスは同じパッケージに含まれていない他のコードからは見えません。デフォルトのアクセシビリティ (明示的に指定することはできません) では、クラス (または他のメンバー) は同じパッケージ内の他のコードからのみ表示されます。

詳細については、 Java 言語仕様のセクション 6.6Java チュートリアル (クラスのメンバーへのアクセスの制御)をお読みください。

于 2013-05-27T19:16:04.197 に答える
9

クラスはpackage privateデフォルトで(ここで概説されているように)、同じようには動作しません。別のパッケージからクラスを消費しようとしていないからだと思うだけです。

于 2013-05-27T19:17:03.287 に答える
3

.java ソース ファイルごとに 1 つのパブリック クラスのみが存在する必要があり、ファイルの名前はこのパブリック クラスと一致する必要があります。

同様の質問がSOで以前に尋ねられます。ここで見つけてください

于 2013-05-28T06:28:34.313 に答える
1

おそらく1つのファイルと同じパッケージで作業しているという理由だけで、同じように機能します。

複数のパッケージがある場合は、問題があります。クラス名の前に「public」が付いていないクラスは、別のパッケージでは作成できません。そのコンストラクターは使用できません。クラスが作成されたパッケージの外からアクセスすることはできません。

于 2015-07-27T18:31:45.523 に答える
0

アクセス修飾子を指定しない場合、デフォルトでパッケージのプライベート アクセスになります。このクラスは、パッケージの外ではアクセスできません。理想的には、混乱や意図しない結果を避けるために、JLS にパッケージ アクセスのキーワードを含める必要があります。

何かのようなもの、

default class Student{}
于 2013-05-27T20:31:02.877 に答える
0

クラスの宣言には、次の 2 つのキーワードのみを使用できます。

  • public .例: public class Student{//...}
  • プライベート パッケージ (デフォルト) .例: クラス 注{//...} .彼のパッケージでのみ表示されます。

クラス内でメンバーを宣言する場合にのみ、private と protected を使用できます。例:

public class Student{
protected Note note;
}
于 2013-05-27T19:33:41.970 に答える