Инкапсуляция
Инкапсуляция - это возможность скрыть внутреннее устройство объекта от его пользователей, предоставив через интерфейс доступ только к тем членам объекта, с которыми клиенту разрешается работать напрямую.
Пользователя не должна беспокоить внутренная работа объекта, поэтому объект должен иметь "удобный" интерфейс через который происходит его общение с пользователем. Например если пользователю нужно получить список товаров он должен вызвать всеголишь метод обекта и передать ему какие-то параметры и получить список. Никакой заботы о том как и откуда объект получит эти данные у пользователя не должно быть.
Наследование
Наследование - это свойство объектов порождать своих потомков. Объект-потомок автоматически наследует от родителя все поля и методы. Это позволяет избежать дублирование кода в классах, за счет вынесения общего кода в базовый (родительский) класс, от которого наследуются потомки (дочерние классы).
Наследование так же позволяет изменить или заменить(перекрыть) поведение какого либо метода унаследованного от базового класса.
Полиморфизм
Полиморфизм - это свойство, которое позволяет одно и то же имя использовать для решения двух или более схожих, но технически разных задач. Применительно к объектно-ориентированному программированию, является использование одного имени для задания общих для класса действий. Выполнение каждого конкретного действия будет определяться типом данных. Т.е. у нас в классе может быть много методов с одинаковыми именами, но сразными входными параметрами. Например, для нахождения абсолютной величины числа требуется три различные функции, каждая из которых вычисляет и возвращает абсолютную величину целых, длинных целых и чисел с плавающей точкой, а можно использовать одну общую функцию abs(). Это называется перегрузкой функций.
Читать далее