#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("Электродвигатель включен!"); } } ``` 📌 Разница между интерфейсом и абстрактным классом в том, что интерфейсы описывают, что класс ДОЛЖЕН делать, а абстрактные классы – как он МОЖЕТ это делать. 🎯 Где применять абстракцию? - Если у вас иерархия классов с общими методами – используйте абстрактный класс. - Если вам нужно гибкое поведение без наследования – используйте интерфейсы. 👉 Абстракция позволяет писать гибкий, расширяемый и поддерживаемый код, уменьшая зависимость от конкретных реализаций.