从超类创建子类的对象



首先,对不起英语不好,这不是我的第一语言

如何通过超类从子类创建类型的对象。例如如果我有一个超类:

public class superClassName(){
    method(){
    make object of subclass type used
    }

然后我在子类中调用该方法。

我想有一个基于被调用的子类创建一个对象,如果这有意义?

使用反射可以提供最快的解决方案(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();
    }
}

最新更新