Push 163 file(s) from Obsidian
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
#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("Электродвигатель включен!");
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
📌 Разница между интерфейсом и абстрактным классом в том, что интерфейсы описывают, что класс ДОЛЖЕН делать, а абстрактные классы – как он МОЖЕТ это делать.
|
||||
|
||||
🎯 Где применять абстракцию?
|
||||
- Если у вас иерархия классов с общими методами – используйте абстрактный класс.
|
||||
- Если вам нужно гибкое поведение без наследования – используйте интерфейсы.
|
||||
|
||||
👉 Абстракция позволяет писать гибкий, расширяемый и поддерживаемый код, уменьшая зависимость от конкретных реализаций.
|
||||
Reference in New Issue
Block a user