Javaのメソッドのデフォルトのスコープは何ですか?


165

入力すると:

 void doThis(){
     System.out.println("Hello Stackoverflow.");
 }

のデフォルトのスコープはdoThis()何ですか?

公衆?保護されていますか?民間?

回答:


264

デフォルトのスコープはpackage-privateです。同じパッケージ内のすべてのクラスは、メソッド/フィールド/クラスにアクセスできます。Package-privateは、保護されたスコープおよびパブリックスコープよりも厳密ですが、プライベートスコープよりも寛容です。

詳細:
http : //docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
http://mindprod.com/jgloss/scope.html


2
「Package-default is stricter than ...」
reinaldoluckman '20

7
「package-private」は、外部ユニットテストのメソッドを公開するときに使用するのに適したスコープであることにも言及する価値があるかもしれません。
Gary Rowe

1
この場合、ライブラリを作成したり、ユーザーがコードの機能を取得するためのものを作成したりしない限り、何かを公開する必要があるのはなぜですか。
ダニエル

2
@ user3858162ほとんどの重要なアプリケーションは複数のパッケージに編成されます。その場合、他のパッケージから呼び出しメソッドを呼び出すにはパブリックスコープが必要です。
Esko Luontola

19

パッケージプライベートとして定義されたものには、クラス自体、同じパッケージ内の他のクラスからアクセスできますが、パッケージの外部やサブクラスからはアクセスできません。

アクセスレベル修飾子の便利な表については、このページを参照してください ...


9

アクセス修飾子がない場合、クラスメンバーは、それが宣言されているパッケージ全体からアクセスできます。詳細については、Java言語仕様、§6.6を参照してください。

インターフェイスのメンバーは、明示的に宣言されているかどうかにかかわらず、常にパブリックにアクセスできます。


5

デフォルトのスコープは「デフォルト」です。奇妙です。詳細については、これらの リファレンス参照してください。


3
実際にはそうではありません:パッケージプライベートです
モーリスペリー

2
回答は承認されたため、削除できません。私はジョーに@Eskoの回答に同意することをお勧めします!
マイケルハーレン、

1
2番目のリンクが壊れている(そして、2つのリンクであることは
見落としがちです

1

Java 8では、デフォルトのスコープ(静的のみ)を使用して、インターフェース自体の内部にメソッドを実装できるようになりました。


0

メソッドに修飾子を与えない場合、デフォルトでは、パッケージ内にスコープを持つデフォルト修飾子になります。
詳細については、http: //wiki.answers.com/Q/What_is_default_access_specifier_in_Javaを参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.