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

67 lines
3.6 KiB
Markdown

#java #абстракции
Одна из ключевых концепций ООП – абстракция. Мы постоянно используем её в [[Java]], даже не задумываясь. Но давайте разберёмся, зачем она нужна и как правильно применять.
📌 Что такое абстракция?
Абстракция – это процесс выделения существенных характеристик объекта, скрывая при этом детали реализации. Это позволяет нам работать с объектами через их интерфейсы, а не конкретные реализации.
Пример из жизни:
Когда вы едете на машине, вам не нужно знать, как работает двигатель. Достаточно уметь жать на газ, тормозить и поворачивать руль. Вот это и есть абстракция – вам доступен только необходимый интерфейс, а детали скрыты.
🔹 Как реализуется абстракция в Java?
В Java абстракция достигается двумя способами:
1. Абстрактные классы (abstract class)
2. Интерфейсы (interface)
🚀 Абстрактные классы
Абстрактный класс может содержать как реализованные, так и абстрактные (без реализации) методы. Его нельзя создать через new, он служит основой для дочерних классов.
```java
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 методы.
```java
interface Engine {
void start();
}
class ElectricCar implements Engine {
@Override
public void start() {
System.out.println("Электродвигатель включен!");
}
}
```
📌 Разница между интерфейсом и абстрактным классом в том, что интерфейсы описывают, что класс ДОЛЖЕН делать, а абстрактные классы – как он МОЖЕТ это делать.
🎯 Где применять абстракцию?
- Если у вас иерархия классов с общими методами – используйте абстрактный класс.
- Если вам нужно гибкое поведение без наследования – используйте интерфейсы.
👉 Абстракция позволяет писать гибкий, расширяемый и поддерживаемый код, уменьшая зависимость от конкретных реализаций.