Абстрактные классы

Как выглядит животное?
- Уже успели ответить? На самом деле, ответа на этот вопрос нет, так как для ответа требуется уточнить, какое именно животное. Получается, что понятие "животное" - абстрактное.

Как выглядит геометрическая фигура? - Уже успели ответить? Я думаю, что нет, ведь здесь то же требуется уточнение, о какой именно геометрической фигуре идёт речь. Получается, что понятие "геометрическая фигура" - абстрактное.

Примеров обстрактных понятий можно приводить много...

Язык программирования Java объектно-ориентированный, всё в этом языке либо класс, либо объект. А придумана парадигма ООП была для того, что-бы программисты могли в коде описать реальные сущности.
Но как же быть с абстрактными понятиями?
- На этот случай, в Java придумали абстрактные классы. От них нельзя создать объект, зато от них можно наследоваться.

Абстрактные классы — это классы, которые не могут быть инстанцированы непосредственно и могут содержать абстрактные методы (методы без реализации) и обычные методы (с реализацией). Они служат основой для других классов, предоставляя общий интерфейс и функциональность для их расширения(наследования).

Чтобы объявить абстрактный класс, используйте ключевое слово abstract перед определением класса:

В файле Animal.java

abstract class Animal { // Абстрактный класс описывающий животного private String nickname; // Кличка животного private int age; // Возраст private String breed; // Порода public Animal(String nickname) { // Конструктор this.nickname = nickname; } /* Перечисляем геттеры и сеттеры... */ public String getNickname() { return nickname; } //итд... abstract void sound(); // Абстрактный метод public void run(){ // Обычный метод System.out.println(this.nickname+" побежал(а)"); } // итд... }

Для создания конкретного класса, который будет наследовать абстрактный класс, необходимо реализовать все его абстрактные методы:

В файле Cat.java

public class Cat extends Animal { @Override // Override - означает, что мы переопределяем (реализуем) метод void sound() { System.out.println("Мяу!"); } }

В файле Dog.java

class Dog extends Animal { @Override // Override - означает, что мы переопределяем (реализуем) метод void sound() { System.out.println("Гав!"); } }

В файле Main.java

public class Main { public static void main(String[] args) { Animal dog = new Dog("Бобик"); dog.sound(); // Вывод: Гав! dog.run(); // Вывод: Бобик побежал(а) Animal cat = new Cat("Мурзик"); cat.sound(); // Вывод: Мяу! cat.run(); // Вывод: Мурзик побежал(а) // При попытке создать объект от абстрактного класса будет ошибка Animal animal = new Animal("Name"); // Здесь мы получаем ошибку! // Создавать объекты от асбтрактных классов НЕЛЬЗЯ! } }

Зачем использовать абстрактные классы?

  • Упрощение структуры кода: Позволяет создать общую базу, от которой будут наследоваться дочерние классы.
  • Полиморфизм: - Позволяет обращаться к объектам разных классов через один интерфейс.
  • Шаблонный метод: - Позволяет создавать шаблоны методов с частичной реализацией, оставляя детали подклассам.

Абстрактные классы являются мощным инструментом в Java для построения архитектуры программ, которая подчеркивает принципы наследования и полиморфизма, способствуя созданию более чистого и понятного кода.


Комментарии

Добавить комментарий

Чтобы оставить комменатрий необходимо Авторизоваться