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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Dynamic binding 
V
    Опции темы
ressac
Дата 4.12.2008, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 1



вот прочитал,
http://en.wikipedia.org/wiki/Dynamic_binding

но так ничего и не понял, не поможет-ли кто наглядным примером ?
PM MAIL   Вверх
ressac
Дата 4.12.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 1



ну что кто-то поможет? smile
PM MAIL   Вверх
rygel
Дата 4.12.2008, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: 6
Всего: 7



довольно пространный вопрос. что именно не понятно? как работает полиморфизм?

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

Наглядный пример приведен в статье. 

void kill(Mortal m) {
  m.die();
}

Методу передается параметр типа Mortal (который является интерфейсом). И на этапе компиляции невозможно узнать метод какого фактического типа необходимо вызвать... передадут ли методу объект типа Plant или Person.


Ну а например если бы у нас был только класс Person объявленный как final:
void kill(Person m) {
  m.die();
}

То в даннм случае использовалось бы статическое связывание на этапе компиляции, так как точно известно что Person не расширяемый, и ссылки на объекты будут только этого типа. 


На русском... довольно подробно
http://www.intuit.ru/department/pl/csharp/18/5.html

Это сообщение отредактировал(а) rygel - 4.12.2008, 13:54
PM MAIL   Вверх
ressac
Дата 5.12.2008, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 1



это как в песне , "нет, ну всё понятно, но что конкретно ты имела в ввиду?" smile

я понимаю что что есть интерфейс и два класса

а где находится метод килл? в каждом из классов ?

Это сообщение отредактировал(а) ressac - 5.12.2008, 20:20
PM MAIL   Вверх
rygel
Дата 5.12.2008, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: 6
Всего: 7



да. в каждом из классов.
PM MAIL   Вверх
ressac
Дата 5.12.2008, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 1



user posted image
такая схема выходит?

теперь я в ступоре

ну вот


        Mortal human = new Person();
        Mortal rose = new Flower();

        rose.kill(rose); ---> смысл?



Это сообщение отредактировал(а) ressac - 5.12.2008, 21:14
PM MAIL   Вверх
rygel
Дата 5.12.2008, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: 6
Всего: 7



сорри. не метод kill, а метод die в каждом из классом.
PM MAIL   Вверх
ressac
Дата 5.12.2008, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 1



в килл где тогда?:
PM MAIL   Вверх
rygel
Дата 5.12.2008, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: 6
Всего: 7



Код

public interface Mortal {
    void die();
}


Код

public class Flower implements Mortal{
    public void die() {
        System.out.println("...");
    }
}


Код

public class Person implements Mortal {
    public void die() {
        System.out.println("Bye");
    }
}


Код

public class Dead {
    public void kill(Mortal mortal) {
        mortal.die();
    }
}


Код

public class Destiny {

    private List<Mortal> listOfMortals= new ArrayList<Mortal>();

    public static void main(String[] args) {
        Destiny destiny = new Destiny();
        destiny.born();
        destiny.dying();
    }

    public void born() {
        listOfMortals.add(new Person());
        listOfMortals.add(new Flower());
    }

    public void dying() {
        Dead dead = new Dead();
        for (Mortal mortal : listOfMortals) {
            dead.kill(mortal);
        }
    }

}

PM MAIL   Вверх
ressac
Дата 6.12.2008, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 1



ok, thx
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.0879 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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