Задать вопрос
@artemfisher

Вызов объектом метода своего класса — это статическое связывание или динамическое?

Добрый день!
Немного запутался, прошу разъяснить.

class MyClass
{
   public void method()
   {
     //..
   }
}

MyClass obj = new MyClass();
obj.method(); // это статический вызов или динамический?
  • Вопрос задан
  • 30 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
xez
@xez Куратор тега Java
TL Junior Roo
Статическое.
Тут понятно какой конкретно метод какого конкретно класса будет вызван.
Ответ написан
Комментировать
1. Стоит различать статические / виртуальные вызовы и связывание (линковку).
В жаве вызовы все по-умолчанию виртуальные.

2. Тут не "объект вызывает метод", а программа обращается к методу объекта.

Дальше я могу очень сильно наврать, так как в недрах жавы совсем не шарю.
В жаве вроде как связывание идёт позднее, так как тот же classpath становится известен только в рантайме.

По идее, если всё происходит в пределах одного class-файла, то тут линковки в принципе и не будет, так как модуль только один.

+ машинный код JIT тоже производит только в рантайме.

+ JIT может виртуальный вызов на статический заменить

Но тут ещё появляется graalvm, который даёт aot.

Так что в итоге ответ - тут может быть как статическое связывание, так и динамическое в зависимости от компилятора и рантайма.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы