Получить доступ

Какие четыре принципа ООП?

JuniorООП
Ещё спрашивают так:
  • Назовите принципы ООП
  • Что такое инкапсуляция, наследование и полиморфизм?
  • Какие основные принципы объектно-ориентированного программирования?
Коротко

Четыре принципа: инкапсуляция, наследование, полиморфизм, абстракция — к каждому короткий пример.

  • Инкапсуляция — скрыть состояние за методами, которые берегут инварианты
  • Полиморфизм — переопределённый метод вызывается по ссылке базового типа

А ещё Скажите, что инкапсуляция — это не просто private-поля с геттерами

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

ООП строит программу из объектов, у которых есть состояние и поведение. На собеседовании ждут не только список, но и пример к каждому принципу.

  • Инкапсуляция — объект скрывает внутреннее состояние и даёт менять его только через методы, которые сохраняют правила (инварианты). Счёт не даёт уйти в минус: поле balance приватное, а withdraw() проверяет сумму. Геттер и сеттер на каждое поле инкапсуляцию не дают.
  • Наследование — класс получает поля и методы родителя (extends) и может их расширять. Используют для отношения «является»; для переиспользования кода чаще лучше композиция.
  • Полиморфизм — один интерфейс, разные реализации: Shape s = new Circle(); s.area() вызовет метод Circle. Выбор метода происходит во время выполнения по реальному типу объекта (переопределение, overriding). Перегрузка (overloading) — другое: выбор при компиляции по типам аргументов.
  • Абстракция — выделяем существенное и прячем детали: интерфейс PaymentGateway описывает, что умеет платёжная система, не раскрывая как.

Пример

interface Shape { double area(); }                 // абстракция
record Circle(double r) implements Shape {
    public double area() { return Math.PI * r * r; }
}
record Square(double side) implements Shape {
    public double area() { return side * side; }
}

List<Shape> shapes = List.of(new Circle(1), new Square(2));
shapes.forEach(s -> System.out.println(s.area())); // полиморфизм

Что хотят услышать

  • Названы все четыре принципа.
  • К каждому — короткий пример из кода.
  • Инкапсуляция объяснена через инварианты, а не через private-поля.
  • Полиморфизм — через переопределение и вызов по ссылке базового типа.

Частые ошибки

  • Путать абстракцию и инкапсуляцию.
  • Сводить полиморфизм только к перегрузке (overloading) вместо переопределения (overriding).

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Наследование, многопоточность, абстракция, рефлексия
  • ✓Инкапсуляция, наследование, полиморфизм, абстракция
  • ✗Инкапсуляция, рекурсия, полиморфизм, сериализация
  • ✗Полиморфизм, иммутабельность, инкапсуляция, дженерики

Что спросят дальше

  • Чем абстрактный класс отличается от интерфейса?
  • Почему composition часто предпочтительнее inheritance?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем