2012-05-11 4 views
3

Java仕様では、デフォルトのアクセス権を持つクラスでコンストラクタをパブリックアクセスできるようになっていますが、パッケージの外部では参照できないため、クラスよりも広いアクセスレベルを持つJavaコンストラクタ

+0

コンストラクタがそのクラスよりも広いアクセス権を持つ理由は、この疑問がよく似ています。私はどのような答えがこれを説明しているのか分かりません。 – Pablo

答えて

2

なぜpublicコンストラクタを使用できるのかを質問している場合:ベースクラスを拡張すると、明示的に(または暗黙的に)呼び出すことができるからです。

+2

はい、ただし、異なるパッケージからクラスconnotを拡張する場合は、publicコンストラクターを使用することはありません。 –

+0

答えをありがとう、@ user439407が状況を説明するまで私はそれを理解できませんでした。 –

4

私はこのコメントを作りたかったが、ないコードタグがコメントで許可されていないので、.... CristopheDs上のあなたのコメントに関しては

は答える:

package bob; 

class MySuperHiddenClass { 

    public MySuperHiddenClass() { 
     System.out.println("bob"); 
    } 
} 

そして

package bob; 
public class MyPublicClass extends MySuperHiddenClass { 

} 

MyPublicClassで宣言されたコンストラクタはありませんが、どのパッケージからでも新しいMyPublicClassを呼び出すことができます。

+2

MySuperHiddenClassのコンストラクタがpublicでない場合でも、任意のパッケージから新しいMyPublicClassを呼び出すことができます。私はこれがどのように質問に答えるかは分かりません。 – Pablo

+0

あなたは100%正しいです、私は私の答えを撤回します。 – user439407

0

クラスの可視性によって、外部の世界がクラスのインスタンスを作成する方法が決まります。したがって、パッケージプライベートクラスは、宣言されているパッケージ内でのみインスタンス化できます。メソッド可視性(コンストラクタを含む)は、既にインスタンス化されたインスタンスがそのクラス定義の外部でどのように使用されるかを決定します。

プライベートクラス/保護されたコンストラクタを使用してパッケージプライベートクラスを宣言した場合、同じパッケージ内の別のクラスからそのインスタンスをどのようにインスタンス化しますか?

2つのもの: class visibility - インスタンスを定義しているパッケージの外でどのように作成するかを指定します。 メソッドの可視性(コンストラクタを含む) - パッケージの可視性に関係なく、メンバへのアクセスがどのように制御されるかを決定します。

関連する問題