Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 29.05.2015
Сообщений: 9
1

Позднее связывание

31.05.2015, 18:26. Просмотров 1756. Ответов 1
Метки нет (Все метки)


Не могу понять казалось бы простую вещь. Позднее связывание на этапе выполнения программы.

Вот например есть код который описывает интерфейс:
Java
1
2
3
public Interface A {
    public void callback();
}
Также есть код в котором два не связанных наследованием класса B и C реализуют вышеописанный интерфейс A:
Java
1
2
3
4
5
6
7
8
9
10
11
class B implements A {
    public void callback() {
        System.out.println("Реализация интерфейса в класса B");
    }
}
 
class C implements A {
    public void callback() {
        System.out.println("Реализация интерфейса в класса C");
    }
}
Допустим далее я делаю следующее:
Java
1
2
3
4
5
6
7
A ob;         // переменная типа ссылки на интерфейс A
 
ob = new B(); // ссылка на объект присваивается переменной типа ссылки на интерфейс
ob.callback(); // вызов callback из класса B
 
ob = new C();
ob.callback(); // вызов callback из класса C

Я понимаю что это благодаря тому что программа смотрит на тип объекта, и выбирает нужный метод. Но почему это происходит во время выполнения я не понимаю. Почему компилятор не знает, на какой объект указывает ссылка ob в первый и во второй раз?
(Тоже самое когда переменная ссылки на суперкласс указывает на объект подкласса и вызывается переопределённый метод. Определяя тип объекта)

Добавлено через 24 минуты
Я понял, вроде. Перечитал тут кое-что:
Оператор new динамически (т.е. во время выполнения) резервирует память память для объекта и возвращает ссылку на него.
Получается если объект создается во время выполнения, компилятор не знает на какой объект будет указывать ссылка, ибо ссылка может указывать на подклассы (а ссылка на интерфейс, на объекты класса реализатора интерфейса) ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.05.2015, 18:26
Ответы с готовыми решениями:

Динамическое связывание
Приветствую. Читаю Хорстманна добрался до раздела Динамическое связывание Не могу вникнуть в...

Раннее связывание
Способность джава делать выбор метода исходя из типа объекта во время выполнения называется поздним...

Скрытие и статическое связывание
Доброго времени суток. Собственно вопрос по терминалогии - в чем разница между статическим...

Как запретить динамическое связывание?
Всем привет. Вот код: import java.util.*; class A { public void Func() {...

1
65 / 64 / 15
Регистрация: 15.12.2013
Сообщений: 166
31.05.2015, 23:02 2
subuniverse, насколько я знаю, раннее связывание выполняется у static и final методов, т.к. они будут известны уже на момент компиляции. Другое дело, если ты дальше создашь подкласс с полиморфными методами это уже будет поздним связыванием, т.к. компилятору нужно будет выбрать метод на момент выполнения.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.05.2015, 23:02

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Позднее связывание
Доброго времени суток! В программе хочу применить механизм виртуальных функций, но его...

Позднее связывание
Всем привет! Нужно сделать такую программу: используя механизм позднего связывания построить список...

Позднее связывание
Надо написать программу которая в папке Plugins просматривает все dll и вызывает метод Print в...

Позднее статическое связывание
Не совсем понимаю замечание в документации: "В нестатическом контексте вызванным классом будет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.