В java, если вызывается метод, НЕ наследуемый каким-либо подклассом, используется ли динамическое или статическое связывание?

#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

Эта статья объясняет это довольно хорошо.