私は学んJava
でおり、私が知っているabstract classes and interfaces
ように、インスタンス化することはできません。ただし、のドキュメントには、抽象でもインターフェイスでもjava.lang.System
ないということはあり得ないと書かれています。instantiated
説明はありません。誰かがこれを説明できますか?
さらに、誰かがそのようなクラスを作成できますか?
私は学んJava
でおり、私が知っているabstract classes and interfaces
ように、インスタンス化することはできません。ただし、のドキュメントには、抽象でもインターフェイスでもjava.lang.System
ないということはあり得ないと書かれています。instantiated
説明はありません。誰かがこれを説明できますか?
さらに、誰かがそのようなクラスを作成できますか?
簡単です。パブリックコンストラクターはありません。
あなたはそれを自分で行うことができます:
final public class Abc {
private Abc() {}
}
java.lang.Systemは、「静的」クラスのJavaバージョンです。これは、静的メソッドのみを持ち、使用する前にインスタンスを作成する必要がない、または作成できないクラスを意味します。
Javaではクラス定義(C#など)にキーワード「static」を使用できないため、このような静的クラスを実現する最善の方法は、コンストラクターをプライベートにすることです。例えば:
public final class System {
private System() { throw new UnsupportedOperationException(); }
public static void method1() { ... }
...other public static methods
}
これは絶対確実ではありません。コンパイラーによってチェックされますが、クラスはそれ自体のメソッドの1つからのみ作成されるように制限されます。これは、プログラマーが実行しないことを知っていることが期待されます(また、忘れた場合は例外によって通知されます)。
クラスをインスタンス化するには、可視のコンストラクターが必要です。ただし、java.lang.Systemはこれを提供していません。
簡単:クラスを作成して、拡張できないようにし、コンストラクターfinal
を持たせると、機能しなくなります。private
new System()
それがどのように機能するかSystem
です。
パブリックコンストラクターを持たないクラスをインスタンス化することはできません。プライベートコンストラクターを使用してクラスを作成し、それをfinalにして、他のクラスがそれを拡張できないようにするだけです。
public final class MyClass {
private MyClass() {
}
}
クラスのオブジェクトをインスタンス化するパブリック静的メンバー(シングルトンパターンを参照)、または静的メンバーのみが必要になることに注意してください。