Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Позднее связывание 
V
    Опции темы
LSD
Дата 22.3.2006, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Обычно иерархия наследования не большая, так что в таблицу можно занести все классы, и для каждого указать какой метод вызывать. Хотя это все конечно зависит от реализации.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
powerOn
Дата 22.3.2006, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Так вопрос немного прояснился smile

Вот документация проясняющая ситуацию в целом.
Думаю, что там есть ответы на все вопросы. smile

Спецификация Виртуальной Машины языка Ява
http://www.uni-vologda.ac.ru/java/jvm/outline.htm

Спецификация языка Ява
http://www.uni-vologda.ac.ru/java/jls/index.html





--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
chief39
Дата 22.3.2006, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 15
Всего: 77



У неё есть исходные данные:
- сигнатура метода(вобщем точное его описание)
- конкретный объект
- исходя из второго - класс объекта. Неважно на объект какого класса ссылка - JVM умеет точно определить конечный класс - то есть тот, который отвечает реальному объекту. То есть, если мы передадим ссылку на Object, она всё равно может вычислить что у нас там лежит String или производное от String'a
- исходя из третьего - список родителей этого класса.
В таблице будут лежать методы нашего класса, его родителя, дальнейших родителей и прабабушек.
Поищет метод для нашего класса. Если нету - для родителя. Если и у него нету - тогда ещё выше. Пока не найдёт где мы перестали переопределять сей метод.
Такого, чтоб метода не было вообще - быть не может - ибо компилятор ругнётся ещё при создании такого кода. Если мы допишем новый - ноу проблем. но хоть что-то должно быть, когда вызываем.
Например, есть класс Animal. У него метод born().
Наследуем в Cat и переопределяем born(). Компилим. Вызываем для Cat born(). Выполнится кошачий а не животный born().
Создаём Dog, унаследовав от Animal.
Компилим.
Вызываем у Dog born(). Вызовется Animal'ский
Дописываем Догу свой born(). КОМПИЛИМ ТОЛЬКО Dog! Animal и Cat лежат скомпиленые с прошлого раза неизменно!!!
Запускаем. Вызовется born() из Dog (потому что нашло раньше чем аналог в Animal). Раньше не было - добиралось до Animal.
Суть в том, что Animal не пришлось перекомпилить. Он не знал что у Dog есть(может быть такой метод). Он обнаружил его и связался с ним во время выполнения. При раннем связывании, пришлось бы животное тоже компилить.
(принимаем что в примере мы обращались к объекту Dog по ссылке типа Animal).



--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
powerOn
Дата 22.3.2006, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159





Цитата

Суть в том, что Animal не пришлось перекомпилить. Он не знал что у Dog есть(может быть такой метод). Он обнаружил его и связался с ним во время выполнения. При раннем связывании, пришлось бы животное тоже компилить.

Т.е. я так понял, что в Java все очень динамически сделано.

Остается только выразить восторг архитекторам JVM, поскольку при такой реализации вызов метода у
java класса порядком опережает (судя по вот этой статье http://www.codenet.ru/webmast/java/javavscpp.php) вызоав виртуального метода в С++.



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
chief39
Дата 22.3.2006, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 15
Всего: 77



Цитата(MoonCat @ 22.3.2006, 12:39 Найти цитируемый пост)
Т.е. я так понял, что в Java все очень динамически сделано.

АХА.
Можно final добавлять - тогда компилер МОЖЕТ РЕШИТЬ вписать намертво(всё равно не переопределят). Но не рекомендуют такое для ускорения производительности - только для запрета переопределения. Хотя и запрет надо с оглядкой юзать. Дядька Эккель попинывает создателей стандартного класса Vector за финалы в его реализации. Так что... "всю власть - гибкости!" smile))


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0845 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.