Files
obsidian/Prog/Абстракция в Java.md
2026-09-24 13:22:58 +05:00

3.6 KiB

#java #абстракции

Одна из ключевых концепций ООП – абстракция. Мы постоянно используем её в Java, даже не задумываясь. Но давайте разберёмся, зачем она нужна и как правильно применять.

📌 Что такое абстракция? Абстракция – это процесс выделения существенных характеристик объекта, скрывая при этом детали реализации. Это позволяет нам работать с объектами через их интерфейсы, а не конкретные реализации.

Пример из жизни:
Когда вы едете на машине, вам не нужно знать, как работает двигатель. Достаточно уметь жать на газ, тормозить и поворачивать руль. Вот это и есть абстракция – вам доступен только необходимый интерфейс, а детали скрыты.

🔹 Как реализуется абстракция в Java? В Java абстракция достигается двумя способами:

  1. Абстрактные классы (abstract class)
  2. Интерфейсы (interface)

🚀 Абстрактные классы Абстрактный класс может содержать как реализованные, так и абстрактные (без реализации) методы. Его нельзя создать через new, он служит основой для дочерних классов.

abstract class Vehicle {
    abstract void start(); // абстрактный метод, без реализации

    void stop() { 
        System.out.println("Машина остановилась");
    }
}

class Car extends Vehicle {
    @Override
    void start() {
        System.out.println("Запуск двигателя...");
    }
}

public class Main {
    public static void main(String[] args) {
        Vehicle car = new Car();
        car.start();
        car.stop();
    }
}

💡 Тут start() – это абстрактный метод, его реализация будет в Car. А вот stop() реализован в базовом классе.

🚀 Интерфейсы Интерфейсы содержат только сигнатуры методов (до Java 8), а с Java 8 можно добавлять default и static методы.

interface Engine {
    void start();
}

class ElectricCar implements Engine {
    @Override
    public void start() {
        System.out.println("Электродвигатель включен!");
    }
}

📌 Разница между интерфейсом и абстрактным классом в том, что интерфейсы описывают, что класс ДОЛЖЕН делать, а абстрактные классы – как он МОЖЕТ это делать.

🎯 Где применять абстракцию?

  • Если у вас иерархия классов с общими методами – используйте абстрактный класс.
  • Если вам нужно гибкое поведение без наследования – используйте интерфейсы.

👉 Абстракция позволяет писать гибкий, расширяемый и поддерживаемый код, уменьшая зависимость от конкретных реализаций.