#16 – Абстрактные классы и методы

#16 – Абстрактные классы и методы

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

Видеоурок

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


Для создания абстрактного классов используется ключевое слово abstract:

public abstract class Person {
 
	private float height;
	private String name;
 	
	// Нет никакой реализации, лишь описание методов
	public float getHeight() { return height; }
	public abstract String getName();
}

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


Классы наследники от абстрактного класса должны реализовывать все методы абстрактного класса, иначе компилятор будет выдавать ошибки. 


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

Исходный код

Весь код будет доступен после подписки на проект!

Задание к уроку

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

Большое задание по курсу

Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца

Также стоит посмотреть

Изучение стека MEAN: MongoDB, Express, Angular и Node JS
10 уроков
Разработка Android программы. Создание чата
6 уроков
Изучение JavaScript для начинающих!
15 уроков
Уроки Java Андроид программирования
14 уроков
Уроки Java для профессионалов
14 уроков
Изучение JavaScript: от нуля и до создания сайта
Комментарии (5)
Добавить комментарий

крч чел 02 июля 2026 в 12:07

учу джаву день 28 02.07.2026
Ответить

Vladimir 30 марта 2025 в 06:31

А где онлайн эдитор?
Ответить

Rzevsky 02 апреля 2024 в 20:23

Снова захотелось сделать что-то свое, более наглядное.
Родительский класс Shape - абстрактный. Также все его методы - абстрактные. Что заставляет переопределять эти методы в классах дочерних.
Из примера видно, что родительский класс компактен и служит для определения структуры дочерних классов.
В консоли выводится:

Green object has circle form and area: 55.389595
Blue object has rectangle form and area: 1104.0
Ответить

Rzevsky 02 апреля 2024 в 20:14


public class Main {
    public static void main(String[] args) {

        Shape circle1 = new Circle("Green", "circle", 4.2f);
        Shape rectangle1 = new Rectangle("Blue", "rectangle", 23, 48);

        System.out.println(circle1.getColor() + " object has " + circle1.getForm() + " form and area: " + circle1.getArea());
        System.out.println(rectangle1.getColor() + " object has " + rectangle1.getForm() + " form and area: " + rectangle1.getArea());
    }

}

public abstract class Shape {
    protected String color;
    protected String form;

    public abstract String getColor();
    public abstract String getForm();
    public abstract float getArea();
}

public class Circle extends Shape {
    private float radius;

    public Circle(String color, String form, float radius) {
        setObject(color, form, radius);
    }

    public void setObject(String color, String form, float radius) {
        super.color = color;
        super.form = form;
        this.radius = radius;
    }

    @Override
    public String getColor() {
        return super.color;
    }

    @Override
    public String getForm() {
        return super.form;
    }

    @Override
    public float getArea() {
        return (float) (3.14 * radius * radius);
    }
}

public class Rectangle extends Shape {
    private int sideA;
    private int sideB;

    public Rectangle(String color, String form, int sideA, int sideB) {
        setObject(color, form, sideA, sideB);
    }

    public void setObject(String color, String form, int sideA, int sideB) {
        super.color = color;
        super.form = form;
        this.sideA = sideA;
        this.sideB = sideB;
    }

    @Override
    public String getColor() {
        return super.color;
    }

    @Override
    public String getForm() {
        return super.form;
    }

    @Override
    public float getArea() {
        return (float) (sideA * sideB);
    }
}
Ответить

Anonimus 08 сентября 2022 в 11:21

Чем дальше в лес, тем жирнее партизаны:) где-то я потерял уже нить
Ответить