2010-09-27 91 views
2

是否可以扩展Math类并仍然使用Math类来调用扩展方法?简单的java继承问题

例如,我有一个方法public static double mean (LinkedList<? extends Number)我想打电话给这样的Math.mean(list)。这是可行的吗?怎么样?

谢谢。

回答

10

Doc java.lang.Math中是final类,不能扩展
更新: 静态方法不能被继承& final类不能扩展。

+3

这并不十分培训相关。如果Math **不是最终的,那么OP仍然不能做他想做的事*因为方法是静态的*。 – 2010-09-27 16:05:47

+1

@Kirk Woll是的你是对的,但最主要的是“是否可以扩展数学课并仍然使用Math类来调用扩展方法?” – 2010-09-27 16:08:31

+0

这与方法是静态的事实一样重要。如果数学方法**不是静态的,那么OP仍然无法做到他想要的*因为这个类是最终的。* – AHungerArtist 2010-09-27 16:58:25

3

您不能继承Math类,因为它是final。你可以使用组合,也就是编写自己的包装类,但是没有多少意义,因为Math的所有方法都是静态的。

4

即使Math不是最终的,你也无法做到这一点。您不能使用超类来调用在子类中定义的函数。根据定义,子类可以访问超类中定义的所有非私有方法,但超类不能访问子类中的函数。

+0

感谢您的解释。这也有帮助。 – nunos 2010-09-27 17:06:31

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 
}