Re[3]: method(obj) то же самое, что и obj.method() ? Что за
От: dr.Chaos Россия Украшения HandMade
Дата: 05.07.07 07:48
Оценка:
Здравствуйте, Perseus, Вы писали:


LP>>>В результате при вызове метода method по интерфейсу I вызовется нужная реализация. Ничего подобного нельзя сделать с функциями.

IB>>Хм...
IB>>Method(A a)
IB>>Method(B b)

P>Это вообще к чему?

P>В данном случае вам придется делать ЯВНОЕ преобразование типа, те с помощью рантаймовой инфы узнавать тип объекта, делать нужный каст и вызывать нужную функцию, либо ловить ClassCastException Какой к черту полиморфизм?


Гхм... Зачем? Помнишь в С++ есть такая штука — перегрузка метода. Те типы принимаемых значений являются частью сигнатуры функции. А компилятор зная тип параметра выбирает нужную функцию. Это и есть специальный(ad hoc) полиморфизм.

Виртуальные функции обеспечивают механизм параметрического полиморфизма.

Но это лишь особенность реализации полиморфизма в конкретном семействе языков. В Haskell'е для этого используются классы типов. Они являются единым механизмом для обоих видов полиморфизма.

Было интересное обсуждение BulatZigansin довольно хорошо объяснил различие м-ду механизмом виртуальных функций и классами типов здесь
Автор: BulatZiganshin
Дата: 06.06.07
.
Побеждающий других — силен,
Побеждающий себя — Могущественен.
Лао Цзы
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.