JavaRush /Курсы /Java Core /Как пользоваться абстрактными классами

Как пользоваться абстрактными классами

Java Core
3 уровень , 3 лекция
Открыта

— Привет, Амиго! Вчера ты уже слушал лекцию про абстрактные классы. Теперь пришло время углубить наши познания. Хочу научить тебя правильно пользоваться абстрактными классами.

Сложно представить аналогию абстрактного класса в реальной жизни. Обычно класс является моделью какой-нибудь сущности. Но абстрактный класс содержит не только реализованные методы, но и не реализованные. Что же это значит? Аналогом чего является абстрактный класс и есть ли у него аналоги в реальном мире?

На самом деле есть. Представь себе почти законченный кузов машины на конвейере. Туда могут поставить как спортивный двигатель, так и экономичный. Как кожаный салон, так и матерчатый. Конкретная реализация машины еще не определена. Более того, таких конкретных реализаций на основе этого кузова предполагается несколько. Но в таком виде машина никому не нужна. Это — классический абстрактный класс: его объекты не имеют смысла, поэтому их создание запрещено, класс имеет смысл, но только для его многочисленных полноценных наследников, которые будут созданы на его основе.

— Это не сложно.

— Но могут быть и более абстрактные аналогии. Больше похожие на интерфейсы, с несколькими реализованными методами. Например, профессия переводчик. Без уточнения, с какого, и на какой язык, получим «абстрактного переводчика в вакууме». Или телохранитель. Про него может быть известно, что он владеет боевыми искусствами и может защитить клиента. Но какими именно единоборствами, и каким способом защитить клиента – это уже «особенности реализации» каждого конкретного телохранителя.

Давай посмотрим пример:

Код на Java Описание
abstract class BodyGuard {
    abstract void applyMartialArts(Attacker attacker);

    void shoot(Attacker attacker) {
        gun.shoot(attacker);
    }

    void saveClientLife(Attacker attacker) {
        if (attacker.hasGun())
            shoot(attacker);
        else
            applyMartialArts(attacker);
    }
}
В классе «телохранитель» определено, как поступать в случае нападения: стрелять или применить боевые искусства.

Но не определено, какие именно боевые искусства, хотя точно известно, что этот навык есть.

Мы можем создать несколько разных телохранителей (унаследовав этот класс). Все они будут уметь защищать клиента и стрелять в нападающего.

3
Задача
Java Core, 3 уровень, 3 лекция
Недоступна
Набираем код Ӏ Java Core: 3 уровень, 3 лекция
Java Core: 3 уровень, 3 лекция. Внимание! Объявляется набор кода на JavaRush. Для этого включите режим повышенной внимательности, расслабьте пальцы, читайте код и… набирайте его в соответствующем окошке. Набор кода — вовсе не бесполезное занятие: благодаря ему новичок привыкает к синтаксису и запоминает его (современные IDE редко дают ему это сделать).

— Действительно, по смыслу очень напоминает интерфейс с несколькими реализованными методами.

— Да, абстрактные классы такого типа мы будем часто встречать среди стандартных классов JavaSE.

Комментарии (185)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Anonymous #3585174 Уровень 33
5 августа 2025
Like
Anastasia Уровень 51
12 августа 2024
Мне понравилась аналогия с английской грамматикой. Абстрактный класс - арикль a, обычный the
kddima0 Уровень 1
9 января 2025
👍👍👍👍👍👍👍
{Java_Shark} Уровень 36
23 июля 2024
++
Alex Уровень 35 Expert
19 июня 2024
Пример с бодигардом отвал башки)) gun.shoot(attacker) ну это прям классно придумали ахахаха)
ORION_71 Уровень 41
10 мая 2024
Мне почему-то зашло сравнение абстрактного класса и интерфейса с кухней. Абстрактный класс - тесто, где можно его не много изменить переопределением методов (добавить специи и т.д), но основная его часть, (мука + вода = тесто). Интерфейсы - множество рецептов создания блюд из этого теста (хлеб, батон, и т.д.). Класс - название изделия "Кулич" Объект - создание задуманного, в теле которого находятся {осуществленные действия по рецептам, в составе теста + дополнительные методы ингредиентов}. P.S. Поправьте если я не прав.
Артём Уровень 28 Expert
30 апреля 2024
Для тех, кому не зашла аналогия с кузовом: Представьте, что нам нужно спроектировать шкаф. Абстрактный класс - описание вида "у него есть две дверцы и он прямоугольный" Класс - чертеж шкафа с размерами элементов Объект - конкретный уже изготовленный шкаф
Максим Li Уровень 30
12 ноября 2023
Ок!
hidden #3204938 Уровень 28
23 октября 2023
Здесь как-то понятнее объясняется
JavaRusher853 Уровень 36
19 марта 2024
Тянет на статью)
Dmitry Shaburov Уровень 33
3 октября 2023
03/10/2023
chess.rekrut Уровень 26
22 августа 2023
easy