Использование отражения может обеспечить самое быстрое решение (this.getClass()
возвращает конкретный подкласс):
void method(){
//use default, no-arg constructor
superClassName newObject = this.getClass().getConstructor().newInstance();
}
Кроме того, ваш родительский класс может объявить абстрактный метод, который заставляет подклассы предоставлять поставщика:
public abstract class superClassName(){
abstract Supplier<superClassName> getInstanceSupplier();
void method(){
superClassName newObject = this.getInstanceSupplier().get();
}
}
И реализовать это так же просто, как:
public class SubClassName extends superClassName {
abstract Supplier<superClassName> getInstanceSupplier() {
return () -> new SubClassName();
}
}