首先,对不起英语不好,这不是我的第一语言
如何通过超类从子类创建类型的对象。例如如果我有一个超类:
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();
}
}