#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 месяца

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

Курс Nuxt JS / Изучение Nuxt.js фреймворка
8 уроков
Практика React JS / Разработка магазина (eCommerce)
9 уроков
Разработка сайта на Java Spring Boot
7 уроков
Уроки Node JS и Express для начинающих
13 уроков
Изучение JavaScript для начинающих!
15 уроков
Создание приложения на React JS / Использование API
7 уроков
Комментарии (4)
Добавить комментарий

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

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