Как ответить
Четыре основных принципа ООП — инкапсуляция, наследование, полиморфизм и абстракция. Они помогают писать код, который легче поддерживать, расширять и тестировать. Разберу каждый с примерами на Java.
- Инкапсуляция — скрытие внутреннего состояния и реализация деталей. Данные доступны только через публичные методы. Например, поле
balanceв банковском аккаунте делаем приватным, а изменение черезdeposit()— чтобы валидировать сумму. Без инкапсуляции кто угодно может напрямую поменять баланс, и невозможно отследить, когда и как это произошло. - Наследование — построение иерархии классов, когда подкласс наследует поля и методы родителя. Например, класс
Animalс методомmakeSound(), аDogиCatпереопределяют его. Но важно не злоупотреблять: глубокое наследование усложняет чтение. На практике часто заменяют композицией, если это не строгое «является». - Полиморфизм — один интерфейс, разные реализации. Бывает двух видов: параметрический (через generics) и ad-hoc (перегрузка методов). Самый полезный вариант — полиморфизм подтипов: работаем с родительской ссылкой, а конкретный объект решает, какой код выполнить. Например, у нас есть метод
processShape(Shape shape), который вызываетshape.draw(). В зависимости от того, круг это или прямоугольник — рисуется по-разному. - Абстракция — выделение главного, отбрасывание лишнего. Допустим, мы описываем
Vehicleс методомmove(). Нас не волнует, как именно машина движется — будто ли двигатель внутреннего сгорания или электро, нас интересует только контракт. На уровне абстрактного класса или интерфейса задаём обязательное поведение, а детали реализации оставляем потомкам. Абстракция тесно связана с инкапсуляцией: первая скрывает сложность, вторая — данные.
Для джуна полезно запомнить: наследование — не панацея. Композиция и интерфейсы часто дают более гибкие решения. Все четыре принципа работают вместе, и нарушение одного обычно ведёт к проблемам с поддержкой кода.