2011-01-12 15 views
15

私は2つの異なるパッケージに2つのクラスを持っています。あるクラスでは、アクセス修飾子を設定せずにコンストラクタを定義しました。このクラスのオブジェクトを別のパッケージでインスタンス化し、エラー 'the constructor xxx() is not visible'を取得します。Javaコンストラクタはデフォルトで公開されていませんか?

私がpublicに変更されたアクセスを定義しても問題ありません。私はコンストラクタがデフォルトで公開されていると思った?

+0

クラスコンストラクタは、デフォルトではパッケージプライベートです。 Enumコンストラクタはデフォルトではプライベートです。 – Boann

答えて

18

なしアクセス指定子!=公共

ません修飾子は、専用パッケージです。チェックdoc

+0

答えはOKですが、リンク先のドキュメントにはデフォルトのc'torsは記載されていません。 –

+1

@Bobあなたは_no modifier_を見ましたか? –

+0

しかし、インターフェイスでは、すべてのメソッドはパブリックであるかどうかにかかわらず公開抽象です –

13

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

2

アクセス修飾子を書き込まないと、デフォルトに設定されます。これはパッケージprivateを意味します。例えば。パッケージ外のクラスはアクセスできません。

1

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

1

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

7

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

1

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

関連する問題