Какими языковыми конструкциями и инструментами в Java реализуются принципы ООП?

«Какими языковыми конструкциями и инструментами в Java реализуются принципы ООП?» — вопрос из категории ООП, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Java принципы ООП реализуются через конкретные языковые конструкции и ключевые слова:

1. Инкапсуляция (Encapsulation)

  • Инструменты: Модификаторы доступа (private, protected, public), геттеры/сеттеры.
  • Цель: Скрыть внутреннее состояние объекта и контролировать доступ к данным.

    public class BankAccount {
    // Поле скрыто (инкапсулировано)
    private double balance;
    
    // Контролируемый публичный интерфейс
    public void deposit(double amount) {
        if (amount > 0) {
            this.balance += amount;
        }
    }
    public double getBalance() {
        return balance;
    }
    // Нет публичного сеттера для balance, что защищает инвариант
    }

2. Наследование (Inheritance)

  • Инструмент: Ключевое слово extends.
  • Цель: Создавать иерархии классов, переиспользуя и расширяя функциональность.
    class Vehicle {
    protected String brand;
    public void honk() {
        System.out.println("Beep!");
    }
    }
    // Car наследует поля и методы Vehicle
    class Car extends Vehicle {
    private String model;
    public void setModel(String model) { this.model = model; }
    }

3. Полиморфизм (Polymorphism)

  • Инструменты: Переопределение методов (@Override), абстрактные классы (abstract), интерфейсы (interface), upcasting.
  • Цель: Использовать объекты разных классов через общий интерфейс.
    
    interface Shape {
    double getArea(); // Абстрактный метод
    }

class Circle implements Shape { private double radius; @Override public double getArea() { return Math.PI radius radius; // Своя реализация } }

class Rectangle implements Shape { private double width, height; @Override public double getArea() { return width * height; // Другая реализация } }

// Полиморфное использование List shapes = Arrays.asList(new Circle(5), new Rectangle(4, 6)); for (Shape s : shapes) { System.out.println(s.getArea()); // Вызовется своя реализация для каждого типа }


**4. Абстракция (Abstraction)**
*   **Инструменты:** Абстрактные классы (`abstract class`) и интерфейсы (`interface`).
*   **Цель:** Скрыть сложную реализацию, показав только существенные характеристики.
```java
// Абстрактный класс задает общий каркас
abstract class DatabaseConnector {
    abstract void connect(); // Абстрактный метод — реализация в подклассах
    public void logConnection() { // Конкретный метод
        System.out.println("Connection logged.");
    }
}

// Интерфейс задает контракт
interface Logger {
    void log(String message);
}

Дополнительные инструменты ООП в Java:

  • Классы и объекты: Базовые строительные блоки (class, new).
  • Конструкторы: Для инициализации состояния объекта.
  • Ключевое слово super: Для вызова конструктора или методов родительского класса.
  • Ключевое слово final: Для запрета наследования (final class) или переопределения метода (final method).