Можно ли переопределить(override) статический метод? И да, и нет.
Да - потому, что никто вам не запрещает этого делать, в том числе и компилятор. Переопределяйте, пожалуйста. И нет - потому, что сколько бы вы не переопределяли статический метод, выполнятся все равно будет базовый.
Рассмотрим пример:
Итак, что имеем на выходе? А имеем мы следующее:
A
A
B
Нас интересует вторая строка, ведь мы, переопределяя метод, ожидали увидеть в ней "B".
А происходит это потому, что выбор вызываемого статического метода происходит при раннем связывании(на этапе компиляции, а не выполнения).
Так что будьте внимательней, ибо (ещё раз) компилятор вам ничего на этот счёт не скажет.
Удачи!
Да - потому, что никто вам не запрещает этого делать, в том числе и компилятор. Переопределяйте, пожалуйста. И нет - потому, что сколько бы вы не переопределяли статический метод, выполнятся все равно будет базовый.
Рассмотрим пример:
class A{ static void f(){ System.out.println("A");} } class B extends A{ static void f(){ System.out.println("B");} } public class Test{ public static void main(String []args){ A aa = new A(); A ab = new B(); B bb = new B(); aa.f(); ab.f(); bb.f(); } }
Итак, что имеем на выходе? А имеем мы следующее:
A
A
B
Нас интересует вторая строка, ведь мы, переопределяя метод, ожидали увидеть в ней "B".
А происходит это потому, что выбор вызываемого статического метода происходит при раннем связывании(на этапе компиляции, а не выполнения).
Так что будьте внимательней, ибо (ещё раз) компилятор вам ничего на этот счёт не скажет.
Удачи!
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.