Полиморфизм
Полиморфизм для понимания считается самым сложным принципом. С точки зрения полиморфизма для объектов схожих классов можно задать одинаковое поведение.
Например: представим класс реализующий круг (в качестве параметров можно указать радиус, площадь, периметр; его можно увеличивать, уменьшать, менять цвет контура или фона, выводить на экран – это и будет являться поведением круга) и представим еще один класс реализующий квадрат (в качестве параметров так же можно принять площадь, длина ребра и тд.; его так же можно увеличивать, уменьшать, менять цвет фона и контура и тд.).
Круг и квадрат являются схожими элементами (классами), а значит и поведение для них может быть задано одинаковое. Оба этих класса можно унаследовать от класса реализующие геометрические фигуры. Далее в родительском классе создать метод изменения цвета фона. И к объектам дочерних классов, в данном случае это квадрат и круг, можно применять этот метод. В этом случае поведение этих фигур будет одинаково, и в том, и в другом случае фон будет меняться, хоть и более подробная реализация этого метода в каждом дочернем классе может отличаться, так как сами фигуры разные.
Можно привести другой пример: в случае если создать объект родительского класса, а инициализировать его как объект дочернего, то это не вызовет никакой ошибки. Программа корректно обработает данный код. В случае нашего примера можно создать массив объектов геометрических фигур (родительского класса) и потом рандомно присваивать разным ячейкам этого массива разные дочерние классы, то это так же не вызовет никакой ошибки.
В этом и есть идея полиморфизма: объекты схожих классов обрабатываются одинаково. Однако если изначально создать массив объектов одного из дочерних классов, а потом к одной из ячеек присвоить объект другого дочернего класса, то это вызовет ошибку. Это вполне логично, так как при более детальной реализации эти классы разные.
Методы
В рамках ООП поведение объекта задают методы, которые так же описаны должны быть описаны при создании класса. Метод содержит в себе набор процедур, которые выполняются над объектом.
Метод аналогично функции в С++ может принимать или не принимать аргументы. В листинге указан способ создания метода, тип_метода – тип возвращаемого методом значения, тип1 и тип2 – типы данных первого и второго аргументов.
тип_метода имя_метода (тип1 имя_аргумента1, тип2 имя_аргумента2, …)
{
// тело метода
}
Если метод возвращает значение, то в его теле должен присутствовать оператор return имя_значения. Этот оператор возвращает имя_значения и прекращает выполнение метода. Важно чтобы переменная имя_значения имела тот же тип данных что и тип_метода и была