web-dev-qa-db-ja.com

Javaコンストラクターはデフォルトで公開されていませんか?

2つの異なるパッケージに2つのクラスがあります。あるクラスでは、アクセス修飾子を設定せずにコンストラクターを定義しました。このクラスのオブジェクトを別のパッケージでインスタンス化すると、エラー「the constructor xxx() is not visible」が発生します。

publicに変更されたアクセスを定義する場合は問題ありません。コンストラクターはデフォルトでパブリックだと思いましたか?

17
Eugene

アクセス指定子なし!= public

パッケージプライベートの修飾子はありません。チェック doc

26
Jigar Joshi

いいえ、そうではないです。デフォルトでパッケージの可視性があります。

13
skaffman

アクセスは(err ...)デフォルトアクセスデフォルトです。 パッケージプライベートとも呼ばれます。考えてみてください。デフォルトでpublicだった場合、コンストラクターがpublicではなく、実際にはパッケージがプライベートであったことをどのように示しますか?それを示すためのパッケージprivateに対応するキーワードはありません。

8
Raedwald

コンストラクターの宣言でアクセス修飾子を使用して、他のどのクラスがコンストラクターを呼び出すことができるかを制御できます。 コンストラクターをパブリックとして明示的に宣言しない場合、コンストラクターは宣言されたのと同じパッケージでのみ表示されます(パッケージアクセス)

4
JuanZe

アクセス修飾子を記述しない場合、デフォルトに設定されます。これは、パッケージがプライベートであることを意味します。例えば。パッケージ外のクラスはアクセスできません。

2
Vladimir Ivanov

いいえ。デフォルトのアクセス指定子があります。つまり、パッケージの可視性があります。

1
rgksugan

クラスでは、アクセス修飾子のないすべてのメソッドにパッケージの可視性があります。ただし、インターフェイスでは、メソッドは常に公開されています。

1
bertolami