explicit no-arg constructor(および他のコンストラクター)のデフォルトのアクセス修飾子が何であるかを説明できますか?
この点では、コンストラクターはメソッドと同じです。明示的なpublic、private、またはprotectedを指定しない場合、コンストラクターはデフォルトの「パッケージプライベート」可視性を取得します。同じクラス内または同じパッケージ内の他のクラスから呼び出すことができますが、異なるパッケージ内のサブクラスからは呼び出せません(したがって、クラスにパッケージ可視のコンストラクターしかない場合、サブクラスは同じパッケージ内になければなりません)。
プライベートコンストラクターはotherクラスがこのインスタンスをインスタンス化することを防ぎますが、独自のプライベートコンストラクターを呼び出すクラス内にパブリックな静的ファクトリーメソッドを持つことができます。これは、シングルトンなどの一般的なパターンです。
JLS 8.8.9デフォルトコンストラクター
クラスにコンストラクター宣言が含まれていない場合、パラメーターを受け取らないデフォルトのコンストラクターが自動的に提供されます。
クラスがパブリックと宣言されている場合、デフォルトのコンストラクタには暗黙的にアクセス修飾子publicが与えられます。
クラスが保護されていると宣言されている場合、デフォルトのコンストラクタには暗黙的にアクセス修飾子protectedが与えられます。
クラスがprivateとして宣言されている場合、デフォルトのコンストラクターに暗黙的にアクセス修飾子privateが与えられます。さもないと、
デフォルトのコンストラクターには、アクセス修飾子なしによって暗黙のデフォルトアクセスが設定されています。
-constructor
は、no access-modifierが定義されている場合、タイプdefault
の-access-controlを持ちます。 明示的に。したがって、このコンストラクタにはPackage Level Accessがあります。このデフォルトコンストラクターを持つクラスのクラスとしてそのパッケージ内で定義されているクラスはそれにアクセスできます。また、デフォルトコンストラクターを含むこのクラスを拡張するクラスは、継承を介してアクセスできます。
-constructorをprivate
にすると、そのクラス内のコードのみがこれにアクセスできます。
シングルトンの例
public class Test {
private static Test uniqueInstance = new Test();
private Test(){}
public static Test getInstance(){
return uniqueInstance;
}
}
-偶数非静的inner classes
クラス内のプライベートメンバーへのアクセス、およびその逆
例:
public class T {
private T(){
System.out.println("Hello");
}
class TT{
public TT(){
new T();
}
}
public static void main(String[] args){
T t = new T();
T.TT i = t.new TT();
}
}