こんにちは、多くのサブクラスを持つ抽象クラスがあります。この抽象クラスのコンストラクタをプライベートにして、ファクトリ メソッドを作成したいと思います。このメソッドがすべてのサブクラスで同じように機能するにはどうすればよいでしょうか? 私が作る場合:
return new AbstractClass();
「クラスは抽象的です。インスタンスにすることはできません... リフレクションを使用する必要がありますか?」というエラーが表示されます。
こんにちは、多くのサブクラスを持つ抽象クラスがあります。この抽象クラスのコンストラクタをプライベートにして、ファクトリ メソッドを作成したいと思います。このメソッドがすべてのサブクラスで同じように機能するにはどうすればよいでしょうか? 私が作る場合:
return new AbstractClass();
「クラスは抽象的です。インスタンスにすることはできません... リフレクションを使用する必要がありますか?」というエラーが表示されます。
super
キーワードを使用して、サブクラスから抽象クラスのコンストラクターにアクセスできます。
public SubClass() {
super(); // this will call AbstractClass()
// something else that you want to do for this subclass
}
コメントで既に指摘したようにnew
、抽象クラスでキーワードを使用することはできません。new を使うときは、本当の型を知る必要があります。
ファクトリ メソッドを抽象基本クラスに実装し、create メソッドや内部ロジックに渡されたパラメータに基づいて、どの非抽象サブクラスを返すかを決定させることができます。
または、ファクトリ メソッド自体を抽象化し、それをすべての非抽象サブクラスに実装して、その型のオブジェクトを返すこともできます。