До 30 ноября

Скидки до 81 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 месяцев
  • Постоянная поддержка от наставника и учебного центра
  • Помощь с трудоустройством
  • Готовое портфолио к концу обучения
  • Практика с первого урока

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

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

Рекомендуемые программы
профессия
Осваивайте разработку веб-страниц, оживляйте дизайн макетов, публикуйте сайты и приложения. Отслеживайте ошибки в интерфейсе и устраняйте их
10 месяцев
с нуля
Старт 21 ноября
профессия
Обучитесь разработке бэкенда сайтов и веб-приложений — серверной части, которая отвечает за логику и базы данных
10 месяцев
с нуля
Старт 21 ноября
профессия
Выполняйте ручное тестирование веб-приложений, находите ошибки в продукте. Узнайте все о тест-дизайне.
4 месяца
с нуля
Старт 21 ноября
профессия
Научитесь разработке веб-приложений, сайтов и программного обеспечения на языке Java, программируйте и используйте структуры данных
10 месяцев
с нуля
Старт 21 ноября
профессия
новый
Собирайте, анализируйте и интерпретируйте данные, улучшайте бизнес-процессы и продукт компании. Обучитесь работе с библиотеками Python
9 месяцев
с нуля
Старт 21 ноября
профессия
Занимайтесь созданием сайтов, веб-приложений, сервисов и их интеграцией с внутренними бизнес-системами на бекенд-языке PHP
10 месяцев
с нуля
Старт 21 ноября
профессия
Создание веб-приложений со скоростью света
5 месяцев
c опытом
Старт 21 ноября
профессия
Обучитесь разработке визуальной части сайта — фронтенда, а также реализации серверной — бэкенда. Освойте HTML, CSS, JavaScript
16 месяцев
с нуля
Старт 21 ноября
профессия
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 21 ноября
профессия
новый
Организовывайте процесс автоматизации тестирования на проекте, обучитесь языку программирования JavaScript, начните управлять процессом тестирования
8 месяцев
c опытом
Старт 21 ноября