是否可以擴展Math類並仍然使用Math類來調用擴展方法?簡單的java繼承問題
例如,我有一個方法public static double mean (LinkedList<? extends Number)
我想打電話給這樣的Math.mean(list)
。這是可行的嗎?怎麼樣?
謝謝。
是否可以擴展Math類並仍然使用Math類來調用擴展方法?簡單的java繼承問題
例如,我有一個方法public static double mean (LinkedList<? extends Number)
我想打電話給這樣的Math.mean(list)
。這是可行的嗎?怎麼樣?
謝謝。
Doc java.lang.Math中是final類,不能擴展
更新: 靜態方法不能被繼承& final類不能擴展。
您不能繼承Math
類,因爲它是final
。你可以使用組合,也就是編寫自己的包裝類,但是沒有多少意義,因爲Math
的所有方法都是靜態的。
即使Math不是最終的,你也無法做到這一點。您不能使用超類來調用在子類中定義的函數。根據定義,子類可以訪問超類中定義的所有非私有方法,但超類不能訪問子類中的函數。
感謝您的解釋。這也有幫助。 – nunos 2010-09-27 17:06:31
解決方法可能是創建您自己的Math類並將java.lang.Math用作組合。沒有任何改變的方法可以被委託給java.lang.Math中的原始方法。您可以重寫您想要更改的方法或在Math類中公開新方法。
代碼看起來象:
public class YourMath {
public static double mean(LinkedList) {
//Your new method
}
public static double abs(double a) {
return Math.abs(a); //Delegate
}
//...... Any other methods
}
這並不十分培訓相關。如果Math **不是最終的,那麼OP仍然不能做他想做的事*因爲方法是靜態的*。 – 2010-09-27 16:05:47
@Kirk Woll是的你是對的,但最主要的是「是否可以擴展數學課並仍然使用Math類來調用擴展方法?」 – 2010-09-27 16:08:31
這與方法是靜態的事實一樣重要。如果數學方法**不是靜態的,那麼OP仍然無法做到他想要的*因爲這個類是最終的。* – AHungerArtist 2010-09-27 16:58:25