我在下面兩個類中定義:如何在不知道類名的情況下調用方法?
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