В Java связывание всех методов осуществляется через позднее связывание?
Подскажите пожалуйста, вот сейчас читаю Брюс Эккель - Философия Java, написано (241 стр.) что в Java
связывание всех методов в Java осуществляется полиморфно, через позднее связывание
и в то же время чуть ранее было написано что
Для всех методов Java используется механизм позднего связывания, если только метод не был объявлен как final
ну и в интернете поискал информацию: вызов статических методов и методов через super использует раннее связывание.
Первое утверждение получается ложно?
Ответы (2 шт):
Возможно, трудности перевода. В оригинале написано (4-е издание, стр.196 ):
All method binding in Java uses late binding unless the method is static or final (private methods are implicitly final). This means that ordinarily you don’t need to make any decisions about whether late binding will occur - it happens automatically.
И далее:
Once you know that all method binding in Java happens polymorphically via late binding, you can write your code to talk to the base class and know that all the derived-class cases will work correctly using the same code.
Т.е. полиморфизм работает через механизм позднего связывания.
Это логично static final и private методы не могут бы переопределены, поэтому их связывание происходит во время компиляция(раннее связывание), как я понимаю например метод this.execute() вот не поймешь this чего во время компиляции? поэтому позднее связывание только для методов которые можно переопределить и связывание происходит