Java 仕様では、デフォルトのアクセス権を持つクラスがそのコンストラクターに public アクセスを持つことを許可していますが、その目的は何ですか? パッケージの外部で参照できないためです。
3 に答える
これをコメントにしたかったのですが、コメントではコードタグが許可されていないため....
CristopheDsの回答に対するあなたのコメントに関して:
package bob;
class MySuperHiddenClass {
public MySuperHiddenClass() {
System.out.println("bob");
}
}
と
package bob;
public class MyPublicClass extends MySuperHiddenClass {
}
MyPublicClass ではコンストラクターが宣言されていませんが、任意のパッケージから新しい MyPublicClass を呼び出すことができます。
コンストラクターを使用できる理由を尋ねている場合は、たとえば、基本クラスを拡張public
するときに明示的に (または暗黙的に) 呼び出すことができるためです。
クラスの可視性は、外の世界がクラスのインスタンスを作成する方法を決定します。したがって、パッケージのプライベート クラスは、宣言されているパッケージ内でのみインスタンス化できます。メソッドの可視性 (コンストラクターを含む) は、既にインスタンス化されたインスタンスをそのクラス定義の外でどのように使用できるかを決定します。
プライベート/保護されたコンストラクターを使用してパッケージのプライベート クラスを宣言する場合、同じパッケージ内の別のクラスからどのようにインスタンス化しますか?
2 つのこと: クラスの可視性 - インスタンスが定義パッケージの外でどのように作成されるかを決定します。メソッドの可視性 (コンストラクターを含む) - パッケージの可視性に関係なく、メンバーへのアクセスを制御する方法を決定します。