是否可以扩展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