java - 当我知道Java中的类名称为字符串时,如何获取子类实例?

标签 java class polymorphism

我想在运行时创建 java 类的实例(它们都扩展父类(super class))。

这里有一些示例类:

class Super {
}

class FirstSub extends Super {
}

class SecondSub extends Super {
}

我知道类名是字符串:

String name = "SubClassName";

这是我的第一个方法:

Super foo;
if (FirstSub.class.getSimplename().equals(name)) {
    foo = new FirstSub();
}
if (SecondSub.class.getSimplename().equals(name)) {
    foo = new SecondSub();
}

如何以更复杂的方式获取“子类”之一的实例?

编辑:此外,我想将 foo 转换为 SubClassName

最佳答案

Class myClass = Class.forName(name);
Object o = myClass.newInstance();
Super instance = (Super)o;
//Subclass instance2 = (Subclass)o;

动态地将变量引用转换为子类是不可能的,也是不值得的。如果在这个地方你的对象可能是 FirstSub 或 SecondSub 那么这两个对象都应该提供一些给定的功能(方法)。您应该在父类(super class)中定义一些(例如抽象)方法(或使其成为接口(interface))。然后,如果你有这样的行:

Super instance = (Super)o;

其中 o 是 Super 子类的实例,然后调用您的方法将调用子类上的方法。这就是多态性之美

关于java - 当我知道Java中的类名称为字符串时,如何获取子类实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7239711/

相关文章:

oop - 删除 if-is 语句的设计选择

java - 获取使用 3 个空格作为指定字符串第一次出现的子字符串以返回索引

java - 解码错误 : unexpected element (uri:url, 本地 :"objectname")。预期的元素是 <{}objectname>

java - 如何在 HSSF apache poi (JAVA) 上克隆具有相关引用的函数

python - 在python中从父类文件调用子类方法

css - 两个样式表,一个悬停效果

c++ - 创建指向类对象的指针数组

java - jstack 抛出异常询问核心

JavaScript - 为什么我会收到意外的未捕获错误 'length' 、 'splice' 等未定义的错误?

java - 多态性和 Object 类