|
|
|
Позднее связывание
|
|||
|---|---|---|---|
|
#18+
В общемто вопрос из раздела ООП. Тут есть ньюансы непосредственно как это работает в java. Хотел бы раз и навсегда прояснить для себя этот вопрос. Правильно ли я вообще понимаю суть вопроса? Допустим имеется у нас некий класс. У него есть потомки с полиморфными функциями. Функции, которые имеют имя аналогичное имени предка, но с своей реализацией. Далее, в коде программы, мы обращаемся к некоторому обьекту и вызываем функцию. При позднем связывании у нас происходит определение, куда именно идти для выполнения функции, в момент вызова функции, а при раннем связывании ставится указатель на этапе компиляции программы. Это правильно вообще? В документациях пишут мол в этом вся фишка, мол тут главное правильно определить куда надо идти т.к. тип обьекта может быть неизвестен изначально или просто будет не полная информация об обьекте. Как-то не совсем прозрачно для понимания. Как может быть обьект неопределен, если мы его явно инициализируем new и указываем что это будет!? Может на примере каком проясните ситуацию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2011, 21:51:15 |
|
||
|
Позднее связывание
|
|||
|---|---|---|---|
|
#18+
jab, если объект вызывает метод из класса-предка, а в этом методе есть обращение к элементу позднего связывания (метод или поле), то сначала будет проверено наличие метода или поля у текущего класса объекта и только потом пойдет поиск по классам-предкам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2011, 21:58:07 |
|
||
|
Позднее связывание
|
|||
|---|---|---|---|
|
#18+
В туториале доступно написано: http://download.oracle.com/javase/tutorial/java/IandI/override.html И вы примерно правильно поняли. При чем здесь недоконструированость объекта, я не очень понял. Но вообще существует ситуация, когда поля инициализированые в месте объявления наблюдаются как null. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2011, 22:42:17 |
|
||
|
Позднее связывание
|
|||
|---|---|---|---|
|
#18+
Хочу спросить у опытных специалистов по поводу одного маленького задания, на которое недавно напоролся...что бы много не говорить ... : public class Test { public static void main(String[] s) { A a = new B(); a.b(); } } class A { void a() { System.out.println("A-a"); } void b() { System.out.println("A-b"); a(); } } class B extends A { void a() { System.out.println("B-a"); } void b() { System.out.println("B-b"); super.b(); } } И теперь вопрос : я понимаю почему программа выводит - B-b A-b, но не могу ЧЕТКО для себя уснить логику, что последня строка - B-a??? Буду признателен за исчерпывающий ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2013, 12:25:16 |
|
||
|
Позднее связывание
|
|||
|---|---|---|---|
|
#18+
Метод a() виртуальный. Поэтому любой его вызов внутри экземпляра B приводит к вызову B.a(). Экземпляра класса А в этом примере нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2013, 12:30:10 |
|
||
|
Позднее связывание
|
|||
|---|---|---|---|
|
#18+
Blazkowiczлюбой его вызов внутри экземпляра B точнее вызов у экземпляра B, а не "внутри" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2013, 12:30:46 |
|
||
|
Позднее связывание
|
|||
|---|---|---|---|
|
#18+
спасибо большое! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2013, 12:46:13 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38354958&tid=2128878]: |
0ms |
get settings: |
15ms |
get forum list: |
28ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
36ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
| others: | 286ms |
| total: | 461ms |

| 0 / 0 |
