例えば以下のように、 public abstract class Test { .... public Test2 extends Test { .... } public Test3 extends Test { .... } } という構成のクラスがあって、Test2やTest3のインスタンスを作りたい時、 Test2 tmp = new Test.Test2(); や Test3 tmp = new Test().new Test3(); などでは生成できないことは理解しました。
そこで、抽象クラスであるTestにpublic abstract staticな↓のファクトリメソッドを作り、それを継承させればよいのでは、と思いました。 親: public static abstract Class<? extends Test> createInstance(); 子: @Override public static Test2 createInstance() { return new Test2(); } しかし、このコードだと、親では「型 Test の 抽象メソッド createInstance は public または protected の可視性修飾子のどちらか 1 つのみをセットできます」が、子では「戻りの型は Test.createInstance() と互換性がありません」というエラーが出てしまいます。