如何从变量创建自定义类? (不是对象)

时间:2014-02-27 09:40:16

标签: java oop inheritance

我知道我可以做到以下几点:

String className = "A";
Object o= Class.forName(className).newInstance();

但请考虑这种情况(简化):

class Parent { 

   public void action() {...};
}

class A extends Parent {

 @Override
 public void action() {...};

}
class B extends Parent {

 @Override
 public void action() {...};

}
class C extends Parent {

 @Override
 public void action() {...};

}

现在我想创建一个可以是这三种情况之一的类。 如果我使用上面的代码并创建一个Object,我将无法调用action方法。 我希望能够创建一个从字符串扩展Parent的对象。

在我的实际案例中,我有多个不同的父母,而且这个班级是从一个班级扩展而来的,这个班级从一个班级扩展到大约4层不等。常规铸造会起作用吗?

2 个答案:

答案 0 :(得分:2)

施法会起作用,但是没必要。 Class#newInstance()返回类型T的实例,它是类的泛型类型。这意味着,因为Class.forName("A")会返回Class<A>的实例,所以由于Parent的继承,您可以将实例声明为A,因为newInstance()正在返回A类型的对象。

Parent p = Class.forName("A").newInstance();
p.action();

答案 1 :(得分:0)

由于您的所有类都扩展Parent,您可以将newInstance()的结果转换为此类型,然后调用Parent中声明的所有方法。 “正确”的实施将运行。

Parent p = (Parent)Class.forName(className).newInstance();
p.action();