#java #inheritance #dynamic-binding #static-binding
#java #наследование #динамическая привязка #статическая привязка
Вопрос:
В java, если вызывается метод, НЕ наследуемый каким-либо подклассом, используется ли динамическое или статическое связывание?
Я знаю, что это не будет иметь никакого значения для вывода в данном конкретном случае, но просто хотел знать это.
Комментарии:
1. Вы имеете в виду, если он не переопределен?
2. Не уверен, но я считаю, что вызовы методов в Java всегда используют динамическую привязку. Статические методы и доступ к закрытым членам используют статическую привязку.
3. @pcalcao — да, я тоже верю, что то, что вы сказали, верно, но хотел подтвердить.
Ответ №1:
Если класс или метод не помечены final
, они могут быть переопределены новыми типами, введенными во время выполнения загрузчиком классов. В этом смысле они все еще «динамические».
Ответ №2:
Во время выполнения JVM знает все загруженные классы и переопределен ли метод; final
модификатор методов не имеет значения для JVM.
Зная это, JVM оптимизирует вызовы методов, которые не переопределяются; привязка является «статической» в этом смысле.
Ответ №3:
Вызовы метода экземпляра в Java всегда используют динамическое связывание. Статические методы и прямой доступ к закрытым членам используют статическое связывание.
Длина: http://geekexplains .blogspot.com/2008/06/dynamic-binding-vs-static-binding-in.html
Эта статья объясняет это довольно хорошо.