Top.Mail.Ru

Перечень уроков по Java

18. Полиморфизм

Приведем несколько определений.

Полиморфизм – возможность замещения методов объекта родителя методами объекта-потомка, имеющих тоже имя.

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

Полиморфизм –способность переменной ссылаться на объекты, имеющие разные фактические типы.

Полиморфизм по-гречески означает «много форм». Объекты, имеющие общего предка, могут принимать разные формы, оставаясь при этом схожими.

Предположим нам необходимо нарисовать разные геометрические фигуры: треугольник, квадрат, круг, трапецию и т.д. Как это сделать без лишних сложностей? Решение следующее. Создадим массив ссылок на все неповторяющиеся фигуры:

Share [] sh = new  Share [100];       // массив из 100 фигур

Если массив содержит ссылки на объекты всех фигур, то картинка может быть нарисована в обычном цикле

for (int i=0; i< sh.length; i++) sh[i].draw();

Абсолютно разные функции рисования выполняются с помощью одного и того же вызова! Если ссылка в массиве указывает на круг, вызывается функция рисующая круг, если он указывает на треугольник, то рисуется треугольник и т.д. Вот это и есть полиморфизм. Функции выглядят одинаково – это выражение draw(), но вызываются разные функции в зависимости от значения sh[]. Полиморфизм одна из ключевых особенностей ООП.

Чтобы использовать полиморфизм, необходимо чтобы:

  • 1) все классы являлись наследниками одного и того же базового класса
  • 2) функция, реализующая метод, например draw(), должна быть объявлена в базовом классе

Возможность переменной, тип которой в соответствии с ее описанием является базовым классом,  ссылаться на объекты производного класса обеспечивается следующим:

  • объект производного класса имеет все те поля и методы, которые имеет базовый класс
  • посредством наследования тип производного класса является типом базового класса.
Динамическое связывание

 Подход, при котором компилятор принимает решение о вызове того или иного метода на этапе выполнения программы, когда уже известно, на какой метод указывает ссылка, называется поздним связыванием или динамическим связыванием. Позднее связывание требует больше ресурсов, но дает выигрыш в возможностях и гибкости.

Автоматический выбор нужного метода для исполнения  на этапе выполнения программы называется  динамическим или поздним связыванием.

Выбор функции в обычном порядке называется ранним или статически связыванием.