Можно ли переопределить(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".
А происходит это потому, что выбор вызываемого статического метода происходит при раннем связывании(на этапе компиляции, а не выполнения).
Так что будьте внимательней, ибо (ещё раз) компилятор вам ничего на этот счёт не скажет.
Удачи!
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.