Здравствуйте, Perseus, Вы писали:
LP>>>В результате при вызове метода method по интерфейсу I вызовется нужная реализация. Ничего подобного нельзя сделать с функциями.
IB>>Хм...
IB>>Method(A a)
IB>>Method(B b)
P>Это вообще к чему?
P>В данном случае вам придется делать ЯВНОЕ преобразование типа, те с помощью рантаймовой инфы узнавать тип объекта, делать нужный каст и вызывать нужную функцию, либо ловить ClassCastException
Какой к черту полиморфизм?
Гхм... Зачем?

Помнишь в С++ есть такая штука — перегрузка метода. Те типы принимаемых значений являются частью сигнатуры функции. А компилятор зная тип параметра выбирает нужную функцию. Это и есть специальный(ad hoc) полиморфизм.
Виртуальные функции обеспечивают механизм параметрического полиморфизма.
Но это лишь особенность реализации полиморфизма в конкретном семействе языков. В Haskell'е для этого используются классы типов. Они являются единым механизмом для обоих видов полиморфизма.
Было интересное обсуждение BulatZigansin довольно хорошо объяснил различие м-ду механизмом виртуальных функций и классами типов
здесьАвтор: BulatZiganshin
Дата: 06.06.07
.