我在下面两个类中定义:如何在不知道类名的情况下调用方法?
public class junk {
private BigInteger a = BigIngeger.valueOf(1), b=BigInteger.valueOf(2), c;
public void DoSomething() {
c = a.add(b);
}
// ... other stuff here
}
public class junkChild extends junk {
private BigDecimal a = BigDecimal.valueOf(1), b=BigDecimal.valueOf(2), c;
// I want a, b, c to override the original BigInteger a,b,c
// ... other stuff here
}
public class myClass {
public static void main(String args[]) {
junk a1 = new junkChild();
a1.DoSomething();
}
}
不幸的是,上述方法无效。
我想要做的是简单地在junkChild
改变a
,b
,c
到BigDecimal
无需再次改写DoSomething()
。即使我必须重新编写代码,代码也会完全一样,所以应该有一种方法可以在不需要编写代码的情况下完成这项工作。该DoSomething
功能应该检查类型a1
具有正确的输入和返回类型的add
方法,如果是这样,调用它而不会担心什么类型a
,b
,c
是。
可以这样做吗?
你应该阅读反思。它将完成你的问题的第二部分。至于第一部分,不要直接使用字段'a','b'和'c',而是使用在子类中重写的方法'getA','getB'和'getC'。 – 2010-01-04 16:17:47
这听起来像你真正想要的是C++ - 就像模板一样。 – 2010-01-04 16:21:04
这听起来像他真正想要的是“鸭子打字”。 – Asaph 2010-01-04 16:22:53