1. ホーム
  2. java

[解決済み] なぜコンストラクタはfinal、static、abstractのいずれにもできないのですか?

2022-02-18 10:25:07

質問

Javaでは、なぜコンストラクタはfinal、static、abstractにできないのですか?

例えば、なぜこれが有効でないのか、説明してもらえますか?

public class K {

    abstract public K() {
        // ...
    }
}

どのように解決するのですか?

として設定した場合、そのメソッドは final という意味です。 "どんなクラスでも上書きしない "こと。 しかし、Java言語仕様によると

JLS 8.8 - コンストラクタ宣言はメンバではありません。これらは決して継承されないので、隠蔽やオーバーライドの対象にはなりません。

としてメソッドを設定すると abstract という意味です。 このメソッドはボディを持たないので、子クラスで実装する必要があります。 しかし、コンストラクタが暗黙のうちに呼び出されるのは new キーワードが使用されているので、ボディを欠くことはできません。

として設定した場合、そのメソッドは static という意味です。 このメソッドは、特定のオブジェクトではなく、クラスに属しています。 しかし、コンストラクタは暗黙のうちに呼び出されてオブジェクトを初期化するため、静的コンストラクタを持つ意味がありません。