Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3. generics.pdf
Скачиваний:
10
Добавлен:
09.06.2015
Размер:
641.09 Кб
Скачать

Дженерики и параметризованные типы

©NetCracker Technology Corp.

Полиморфизм

©

NetCracker Technology Corp.

/

Что такое полиморфизм?

.

В самом общем смысле полиморфизм — это свойство языка программирования работать с данными разных типов единообразным способом.

Тип называется полиморфным, если операции над ним применимы к другим типам.

Необходимость полиморфизма связана с

уменьшением количества сущностей, которыми оперирует программист; переиспользование кода;

желанием приблизить модель вычислений на компьютере к более привычной, «естественной» модели мышления.

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

.

©

NetCracker Technology Corp.

/

Виды полиморфизма

.

Функция — именованный блок кода, возможно, принимающий некоторые данные извне (параметры/аргументы) и, возможно, возвращающий некоторый результат.

Типы полиморфизма:

ad-hoc (ситуативный) полиморфизм — функция по-разному рабо-

тает с данными разных типов из заранее фиксированного набора;

параметрический полиморфизм — функция работает одинаково с данными произвольных типов;

полиморфизм подтипов (включения) — функция работает одинако-

во с данными типов, являющихся подтипами одного общего супертипа, предоставляющего общий интерфейс.

.

©

NetCracker Technology Corp.

/

Полиморфизм в Java

.

В Java доступны все виды полиморфизма:

ad-hoc-полиморфизм — перегрузка методов:

public static String toString(long value) { ... } public static String toString(double value) { ... }

полиморфизм подтипов — наследование и иерархия классов:

public class Base { public void method() { ... } } public class Child extends Base {

@Override public void method() { ... }

}

public class Child extends Base { @Override public void method() { ... }

}

параметрический полиморфизм — дженерики и параметризованные классы:

public class List<T> { public T get(int index) { ... } }

public static <T> T getInstance(Class<T> clazz) { ... }

.

©

NetCracker Technology Corp.

/