Скидки до 20% + 2-ая профессия бесплатно и подарки на 50 000₽

Главная | Все статьи | Код

Как создать абстрактный класс в Java: пошаговое руководство

Java Время чтения статьи ~4 минуты
Как создать абстрактный класс в Java: пошаговое руководство главное изображение

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

Java-разработчик — с нуля до трудоустройства за 10 месяцев
  • Постоянная поддержка от наставника и учебного центра
  • Помощь с трудоустройством
  • Готовое портфолио к концу обучения
  • Практика с первого урока

Вы получите именно те инструменты и навыки, которые позволят вам найти работу

Узнать больше

Создаем абстрактный класс Java за четыре шага

Абстрактный класс в Java — это специальный класс, который нельзя использовать напрямую для создания объектов. Он служит основой для других классов. В нём могут присутствовать абстрактные методы, то есть методы без реализации, которые должны быть прописаны в дочерних классах.

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

Шаг 1: Создайте абстрактный класс

Допустим, мы создаем игру, где нужно рисовать предметы разной формы: круги, ромбы и звездочки. Вместо трех объектов для разных форм мы создаем абстрактный класс Shape, используя ключевое слово abstract.


abstract class Shape {

// Абстрактный метод

abstract void draw();

// Обычный метод

void info() {

System.out.println("This is a shape.");

}

}

Здесь draw() — абстрактный метод, который дочерние классы должны будут реализовать.

info() — обычный метод, который можно использовать в дочерних классах без переопределения.

Шаг 2: Создайте дочерний класс

Создайте класс Circle, который наследует абстрактный класс Shape.

class Circle extends Shape {

// Реализация абстрактного метода

void draw() {

System.out.println("Drawing a circle.");

}

}

Метод draw() переопределяется в классе Circle, предоставляя свою реализацию абстрактного метода из Shape. Таким же образом мы можем создать дочерние классы для других форм — Diamond или Star.

Шаг 3: Создайте тестовый класс

Создайте класс Main с методом main.

public class Main {

public static void main(String[] args) {

var c = new Circle();

c.draw(); // Вызов реализованного метода

c.info(); // Вызов обычного метода

}

}

Внутри метода main создается объект Circle.

Вызывается метод draw(), реализованный в Circle, который выводит "Drawing a circle".

Вызывается метод info(), унаследованный из Shape, который выводит "This is a shape".

Если вы прописали дочерние классы для других форм, вы можете указать их внутри метода Main.

Шаг 4: Запустите код

Скомпилируйте и запустите код, чтобы увидеть вывод от методов draw и info.

Пример абстрактного класса Java в коммерческой разработке

Предположим, вы разрабатываете систему платежей для интернет-магазина. Система должна обрабатывать разные виды платежей, такие как кредитные карты и банковские переводы.

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

  1. Определение абстрактного класса PaymentProcessor
abstract class PaymentProcessor {

// Общая логика обработки платежа

void processPayment(double amount) {

authenticate();

initiatePayment(amount);

confirmPayment();

}

// Абстрактные методы для конкретных реализаций

abstract void authenticate();

abstract void initiatePayment(double amount);

abstract void confirmPayment();

} }

Общий метод processPayment() описывает структуру процесса оплаты. Абстрактные методы authenticate(), initiatePayment() и confirmPayment() будут реализованы в дочерних классах.

  1. Определение дочерних классов для конкретных видов платежей.
  2. Кредитные карты:
class CreditCardProcessor extends PaymentProcessor {

void authenticate() {

System.out.println("Authenticating credit card user...");

}

void initiatePayment(double amount) {

System.out.println("Processing credit card payment of $" + amount);

}

void confirmPayment() {

System.out.println("Confirming credit card payment.");

}

} } }
  • Банковский перевод:
class BankTransferProcessor extends PaymentProcessor {

void authenticate() {

System.out.println("Authenticating bank transfer user...");

}

void initiatePayment(double amount) {

System.out.println("Processing bank transfer of $" + amount);

}

void confirmPayment() {

System.out.println("Confirming bank transfer.");

}

}
  • Использование в приложении:
public class Main {

public static void main(String[] args) {

var payment1 = new CreditCardProcessor();

payment1.processPayment(100.00);

PaymentProcessor payment3 = new BankTransferProcessor();

payment3.processPayment(200.00);

}

}

В главном классе создаются объекты разных платежных процессоров и вызывается метод processPayment. Каждый тип процессора обрабатывает платежи по-своему благодаря реализации абстрактных методов.

Заключение

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

Java-разработчик — с нуля до трудоустройства за 10 месяцев
  • Постоянная поддержка от наставника и учебного центра
  • Помощь с трудоустройством
  • Готовое портфолио к концу обучения
  • Практика с первого урока

Вы получите именно те инструменты и навыки, которые позволят вам найти работу

Узнать больше

Похожие статьи
Рекомендуемые программы
профессия
Верстка на HTML5 и CSS3, Программирование на JavaScript в браузере, разработка клиентских приложений используя React
10 месяцев
с нуля
Старт 26 декабря
профессия
Программирование на Python, Разработка веб-приложений и сервисов используя Django, проектирование и реализация REST API
10 месяцев
с нуля
Старт 26 декабря
профессия
Тестирование веб-приложений, чек-листы и тест-кейсы, этапы тестирования, DevTools, Postman, SQL, Git, HTTP/HTTPS, API
4 месяца
с нуля
Старт 26 декабря
профессия
Программирование на Java, Разработка веб-приложений и микросервисов используя Spring Boot, проектирование REST API
10 месяцев
с нуля
Старт 26 декабря
профессия
новый
Google таблицы, SQL, Python, Superset, Tableau, Pandas, визуализация данных, Anaconda, Jupyter Notebook, A/B-тесты, ROI
9 месяцев
с нуля
Старт 26 декабря
профессия
Программирование на PHP, Разработка веб-приложений и сервисов используя Laravel, проектирование и реализация REST API
10 месяцев
с нуля
Старт 26 декабря
профессия
Программирование на Ruby, Разработка веб-приложений и сервисов используя Rails, проектирование и реализация REST API
5 месяцев
c опытом
Старт 26 декабря
профессия
Программирование на JavaScript в браузере и на сервере (Node.js), разработка бекендов на Fastify и фронтенда на React
16 месяцев
с нуля
Старт 26 декабря
профессия
Программирование на JavaScript, разработка веб-приложений, bff и сервисов используя Fastify, проектирование REST API
10 месяцев
с нуля
Старт 26 декабря
профессия
новый
Git, JavaScript, Playwright, бэкенд-тесты, юнит-тесты, API-тесты, UI-тесты, Github Actions, HTTP/HTTPS, API, Docker, SQL
8 месяцев
c опытом
Старт 26 декабря