【问题标题】:Make object of a subclass from the super class从超类中创建子类的对象
【发布时间】:2019-02-07 19:01:19
【问题描述】:

首先,很抱歉英语不好,这不是我的第一语言

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

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

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

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

【问题讨论】:

  • 在什么样的场景下你需要这种行为?
  • 我需要创建一个对象列表但是每个其他子类的代码是相同的,所以我试图进一步抽象方法
  • @InsertRealName 那么是什么阻止您这样做呢?我的意思是这可以做到。我看不到你卡在哪里了?
  • 所以它会是创建其他子类实例的子类实例(在超类方法中......)?
  • 是的,我无法让它识别子类类型@ernest_k

标签: java oop


【解决方案1】:

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

【讨论】:

  • 他想从他的超类中实例化子类,这是不可能的......不是我的反对票
猜你喜欢
  • 2017-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-24
  • 2010-10-12
相关资源
最近更新 更多