gpt4 book ai didi

java - 使用变量类实例化抽象类

转载 作者:行者123 更新时间:2023-12-02 10:09:09 25 4
gpt4 key购买 nike

出于显而易见的原因,我们不能像这样直接实例化抽象类:

AbstractObj obj = new AbstractObj(); 

其中 AbstractObj 是以下形式的类:

public abstract class AbstractObj {
//... Body omitted
}

但是,如果我们有扩展类,如下所示:

public class ConcreteObj extends AbstractObj {
//... Body omitted
}

public class AnotherObj extends AbstractObj {
//... Body omitted
}

是否可以通过以下方式实例化一个对象?这根据传入变量的类确定必须使用哪个构造函数。现在假设保证 o1 和 o2 具有相同的类型。

protected AbstractObj computeDiff(AbstractObj o1, AbstractObj o2){
AbstractObj delta = ...?
}

例如,在上面,如果o1是ConcreteObj类型,有没有办法在运行时识别它是否是这种类型并使用适当的构造函数?

最佳答案

这里:

protected AbstractObj computeDiff(AbstractObj o1, AbstractObj o2){
AbstractObj delta = ...?
}

您可以使用o1.getClass()获取o1的具体类。然后,如果这个具体类有默认构造函数,您可以使用 Class.newInstance() 调用它:

protected AbstractObj computeDiff(AbstractObj o1, AbstractObj o2) throws IllegalAccessException, InstantiationException{
AbstractObj delta = o1.getClass().newInstance();
}

关于java - 使用变量类实例化抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55119442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com