【发布时间】:2015-11-06 11:02:41
【问题描述】:
我有一个父类和 2 个子类。我正在尝试实现一个函数,该函数将孩子的类型和哪个孩子作为参数。
当我使用child.newInstance() 时,我想将其存储在传递的类型的变量中,并从第二个参数调用函数。
以下是类
public class Parent {
public void test() {
System.out.println("Test from parent");
}
}
public class ChildA extends Parent {
public void testChildA() {
System.out.println("Test from child a");
}
}
public class ChildB extends Parent {
public void testChildB() {
System.out.println("Test from child b");
}
}
这是我正在尝试实现的方法
public class Driver {
Parent func(Class child, String whichChild) throws Exception {
// whichChild: "ChildA" or "ChildB"
Object obj = child.newInstance();
// cast obj to type of child and call the method "test" and "test" + whichChild
}
}
可以完成我想做的事情吗?如果是,如何将此对象转换为传递的类型?
【问题讨论】:
-
你想用这个实现什么?为什么不直接覆盖孩子的测试?
-
我不能改变类的结构也不能覆盖方法,因为子方法有其他功能,我错误地添加了
super.test();,对此感到抱歉 -
编译时安全和静态分析是非常强大和有用的工具,当使用反射 API 时,您会失去它们提供的所有好处。在运行之前,您不会知道代码是否有效。无法找到您通过反射调用的方法的用法。 IDE 还会报告未使用的方法,这是不正确的。请参阅 Andy Turner 的回答,这样做的最佳方法是什么。
-
@aizen92 你能在
Parent类中添加额外的抽象方法吗? -
@aizen92 这听起来像是继承的完美场所。为什么不能修改
Parent类?