Короткий ответ
ООП — объектно-ориентированное программирование: методология, в которой программа строится как совокупность взаимодействующих объектов. Каждый объект — экземпляр класса — объединяет состояние (поля) и поведение (методы). В Java выделяют четыре принципа: инкапсуляцию, наследование, полиморфизм и абстракцию.
Как это работает подробнее
Принципы связаны между собой: инкапсуляция прячет данные, наследование выстраивает иерархии, полиморфизм позволяет единому коду работать с разными типами, абстракция отделяет «что делать» от «как».
- Инкапсуляция. Сокрытие внутреннего устройства объекта: поля делают
private, а доступ к ним дают через публичные геттеры и сеттеры. Это защищает данные от некорректного изменения. - Наследование. Новый класс создаётся на основе существующего через
extends: наследник получает поля и методы родителя и может расширять или переопределять их. Например,Catнаследуется отAnimal. - Полиморфизм. Одноимённые методы ведут себя по-разному: вызов
animal.voice()дляDogдаст «Гав», а дляCat— «Мяу»; конкретная реализация выбирается на этапе выполнения. - Абстракция. Выделение существенных характеристик объекта и игнорирование несущественных. На практике выражается в абстрактных классах и интерфейсах, описывающих «что делать» без уточнения «как».
Пример кода
AnimalDemo.java
abstract class Animal {
private String name; // инкапсуляция
Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
abstract void voice(); // абстракция
}
class Dog extends Animal { // наследование
Dog(String name) {
super(name);
}
@Override
void voice() { // полиморфизм
System.out.println("Гав");
}
}
class Cat extends Animal {
Cat(String name) {
super(name);
}
@Override
void voice() {
System.out.println("Мяу");
}
}
public class AnimalDemo {
public static void main(String[] args) {
Animal a = new Dog("Бобик");
a.voice(); // выведет «Гав»
}
}Что использовать на практике
- Проектировать классы вокруг состояния и поведения, а не как простые «хранилища полей».
- Скрывать поля модификатором
privateи давать контролируемый доступ через методы. - Использовать наследование для отношения IS-A, а полиморфизм — для единой работы с семейством типов.
Подводные камни
- Забывать про абстракцию и называть только три принципа: в Java их четыре.
- Сводить инкапсуляцию к
private-полям: суть — в контроле доступа и поддержании инвариантов объекта. - Приводить пример полиморфизма без переопределения — это будет перегрузка, а не полиморфизм выполнения.
Как отвечать на собеседовании
- Каркас ответа: дайте определение ООП (объекты = состояние + поведение) → перечислите четыре принципа → раскройте каждый на мини-примере с Animal, Cat и Dog → завершите, зачем это нужно: переиспользование, гибкость и простота сопровождения.