Модификатор final в Java не обеспечивает раннее связывание метода (на этапе компиляции), лишь не дает определить метод в наследнике с такой же сигнатурой и в том числе переопределить соответствующий метод предка, так ли это? Вопрос: Есть ли в Java ранее связывание, то есть когда уже на этапе компиляции вызову метода ставится в соответствие код который будет выполняться?
Ответ
Цитата из источника: Полиморфизм в Java
Если перегруженные методы с одинаковыми именами находятся в одном классе, списки параметров должны отличаться. Но если метод подкласса совпадает с методом суперкласса (порождающего класса), то метод подкласса переопределяет метод суперкласса. Совпадать при этом должны и имена методов и типы входных и выходных параметров. В данном случае переопределение методов является основой концепции динамического связывания (или позднее связывание), реализующей полиморфизм. Суть динамической диспетчеризации методов состоит в том, что решение на вызов переопределенного метода принимается во время выполнения, а не во время компиляции. Однако final-методы не являются переопределяемыми, их вызов может быть организован во время компиляции и называется ранним связыванием
Комментариев нет:
Отправить комментарий