Разберем пример: пусть нам необходимо описать породу собаки в нашем классе. Существуют довольно много собачьих пород, которые в свою очередь обладают уникальными свойствами. Для каждой породы нам придется написать свой собственный класс. В то же время все породы обладают параметрами, присущие абсолютно для всех собак. У нас есть вариант описать абсолютно все свойства в каждом классе, в том числе уникальные для каждой породы и универсальные, присущие для всех пород, но это займет много кода и вовсе усложнит задачу. Можно просто создать главный класс собак, описать в нем параметры и поведение, которые есть у всех и класс, описывающую конкретную породу унаследовать от главного.
Инкапсуляция
При создании классов важно помнить об уровне защиты компонентов. Важно не допускать, чтобы код, содержащийся вне класса, не влиял без надобностей на данные класса. Это может произойти, например, по вине программиста, в особенности, если он работает в команде, и по другим причинам. Последствия могут быть довольно плачевные. Суть инкапсуляции состоит в том, что для данных и кода, который работает с данными, условно создается рабочее пространство. Тем самым программу можно разделить на несколько систем, внутри которых происходит вся работа с данными, но снаружи никак не влияющие на работу другой системы. Это делается для того, чтобы защитить данные от плохого влияния стороннего кода.
Конечно же программно эти пространства никак не описываются. Защищенность данных достигается путем присваивания модификаторов доступа.
Как пример могу привести работу автомобиля. Его можно воспринимать как программу. Разберем работу коробки передач. Она хранит в себе множестве сведений: максимальное количество передач, текущая включенная передача, конструкция – все это можно назвать данными. В ходе работы в ней происходят множество процессов, которые изменяют эти данные. При этом коробка не влияет, например, на систему световых приборов. Обе эти системы работают независимо друг от друга. В этом и есть суть инкапсуляции.
Полиморфизм
Полиморфизм для понимания считается самым сложным принципом. С точки зрения полиморфизма для объектов схожих классов можно задать одинаковое поведение.
Например: представим класс реализующий круг (в качестве параметров можно указать радиус, площадь, периметр; его можно увеличивать, уменьшать, менять цвет контура или фона, выводить на экран – это и будет являться поведением круга) и представим еще один класс реализующий квадрат (в качестве параметров так же можно принять площадь, длина ребра и тд.; его так же можно увеличивать, уменьшать, менять цвет фона и контура и тд.).