Простой вопрос наследования Java - PullRequest
2 голосов
/ 27 сентября 2010

Можно ли расширить класс Math и при этом использовать класс Math для вызова расширенного метода?

Например, у меня есть метод public static double mean (LinkedList<? extends Number) Я бы хотел вызвать вот так Math.mean(list). Это выполнимо? Как?

Спасибо.

Ответы [ 4 ]

10 голосов
/ 27 сентября 2010

Документ Java.lang.Math - конечный класс, не может быть расширен
Обновление: Статический метод не может быть унаследован, а последний класс может 'т быть продлен.

4 голосов
/ 27 сентября 2010

Даже если математика не была окончательной, вы не могли этого сделать.Вы не можете использовать суперкласс для вызова функции, определенной в подклассе.По определению, подкласс имеет доступ ко всем не закрытым методам, определенным в суперклассе, но суперкласс не имеет доступа к функциям в подклассе.

3 голосов
/ 27 сентября 2010

Вы не можете создать подкласс класса Math, потому что он final. Вы можете использовать состав, то есть написать свой собственный класс-обертку, но в этом не будет особого смысла, потому что все методы Math являются статическими.

1 голос
/ 27 сентября 2010

Обходным путем может быть создание собственного класса 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...