Топ-100Абстрактный класс - CodOrbits
LogoCodOrbits

Раздел: ООП

Здесь вы познакомитесь с объектно-ориентированным программированием в Java: классы, наследование, инкапсуляция и полиморфизм и многое другое.

Все разделы
Иконка ООП

Абстрактный класс

Last updated: 3 мая 2025 г.

Абстрактный классобщий концепт чего-либо.

Это класс, который содержит в себе нереализованные методы (называются абстрактными методами), которые наследники должны реализовать.

Под ‘нереализованные’ имеется ввиду, что такие методы только объявляются в абстрактном классе, то есть у них нет тела, то есть кода внутри {}.

Абстрактные методы помечаются ключевым словом abstract.

Приведем пример абстрактного класса. Например птица. Птица это общий концепт для любой птицы, будь-то воробей или попугай.

Абстрактный класс птицы может иметь не только абстрактные методы, а и методы с реализацией.

Например.

Любая птица имеет крылья. Махание крыльями примерно ОДИНАКОВОЕ у всех птиц (ну по крайней мере представим так). Соответственно можно создать в абстрактном классе не абстрактный, а обычный метод с реализацией для махания крыльями и все классы птиц, которые наследуют от абстрактного класса Птица будут по умолчанию пользоваться методом для махания крыльями из абстрактного класса.

Абстрактный же метод в абстрактном классе Птица будет иметь смысл определить в таком случае:

Любая птица издает какие-то звуки. Но в этом уже случае почти все птицы издают РАЗНЫЕ звуки. Значит в абстрактном классе Птица должен быть абстрактный метод для издавания звуков, который наследующие от этого абстрактного класса птицы обязаны переопределить.

То есть суть в том, что если мы знаем, что у класса, который мы создаем будут наследники и у всех них будет метод, который будет выполнять одно и то же действие (например, издавание звуков у птиц), но результат этого метода у всех наследников будет разным (разные звуки), то есть смысл объявить создаваемый нами класс абстрактным и объявить этот метод абстрактным.

Из примеров абстрактных классов можно еще привести, например, Форма (форму реализует например куб и треугольник), средство передвижения (реализует машина или велосипед)

Search Icon

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

Поясним на примере:

1abstract class Bird {
2    //поля и абстрактные методы
3    private String species;
4    private int age;
5    
6    //Метод махания крыльями с реализацией по умолчанию.
7    //Махание крыльями примерно одинаковое у птиц
8    //(ну по крайней мере представим так)
9    //поэтому для всех наследников класса Bird
10    //пусть будет один общий метод,
11    //которым они будут пользоваться.
12    //То есть большинству наследников не придеться
13    //переопределять wingsFlapMechanic
14    public void wingsFlapFlap() {
15        System.out.println("Flap Flap Flap …");
16    }
17
18    //не реализованный метод, который
19    //обязан реализовать наследники
20    //поскольку все птицы издают разные звуки
21    //(ну почти все наверное).
22    public abstract void pirdVoice();
23
24    //То есть если мы точно знаем что
25    //у всех наследников будет
26    //своя реализация метода
27    //делаем его абстрактным.
28
29    //просто геттеры сеттеры.
30    public String getSpecies() {
31        return species;
32    }
33
34    public void setSpecies(String species) {
35        this.species = species;
36    }
37
38    public int getAge() {
39        return age;
40    }
41
42    public void setAge(int age) {
43        this.age = age;
44    }
45}
46
47class Parrot extends Bird {
48    //реализуем абстрактный метод
49    public void pirdVoice() {
50        System.out.println("RRAAAR!");
51    }
52}
53
54class Sparrow extends Bird {
55    //реализуем абстрактный метод
56    public void pirdVoice() {
57        System.out.println("Chick-Chirik");
58    }
59}
60
61public class AbstractExample {
62    public static void main(String[] args) {
63        Parrot parrot = new Parrot();
64        Sparrow sparrow = new Sparrow();
65
66        //Пускай теперь эти разные
67        //птицы помахают крыльями.
68        parrot.wingsFlapFlap();
69        sparrow.wingsFlapFlap();
70        //Махают одинаково как видим
71
72        //теперь пусть споют
73        parrot.pirdVoice();
74        sparrow.pirdVoice();
75        //как видим у них разный голос
76    }
77}

Вывод:


Следующие уроки

Интерфейсы в Java

13
мин.

Similar Articles Icon
Divider

Статические поля

10
мин.

Similar Articles Icon
Divider

Внутренний класс

12
мин.

Similar Articles Icon