简单的java继承问题

时间:2010-09-27 16:01:34

标签: java inheritance

是否可以扩展Math类并仍然使用Math类来调用扩展方法?

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

感谢。

4 个答案:

答案 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
}