是否可以扩展Math类并仍然使用Math类来调用扩展方法?
例如,我有一个方法public static double mean (LinkedList<? extends Number)
我想这样称呼Math.mean(list)
。这可行吗?怎么样?
感谢。
答案 0 :(得分:10)
Doc Java.lang.Math是Final类,无法扩展
更新:
静态方法无法继承&amp;最后一堂课不能延期。
答案 1 :(得分:4)
即使数学不是最终的,你也不能这样做。您不能使用超类来调用子类中定义的函数。根据定义,子类可以访问超类中定义的所有非私有方法,但是超类不能访问子类中的函数。
答案 2 :(得分:3)
您不能将Math
类子类化,因为它是final
。您可以使用合成,即编写自己的包装类,但由于Math
的所有方法都是静态的,因此没有多大意义。
答案 3 :(得分:1)
解决方法可能是创建自己的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
}