首先,对不起英语,对不起,这不是我的母语
如何通过超类从子类中创建类型的对象。 例如 如果我有一个超级班级:
public class superClassName(){
method(){
make object of subclass type used
}
然后在子类中调用该方法。
我想创建一个基于被调用的子类的对象吗?
答案 0 :(得分:0)
使用反射可能提供最快的解决方案(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();
}
}