Абстрактный класс
Last updated: 3 мая 2025 г.Абстрактный класс
– общий концепт чего-либо.
Это класс, который содержит в себе нереализованные методы (называются абстрактными методами
), которые наследники должны реализовать.
Под ‘нереализованные’ имеется ввиду, что такие методы только объявляются в абстрактном классе, то есть у них нет тела, то есть кода внутри {}.
Абстрактные методы помечаются ключевым словом abstract.
Приведем пример абстрактного класса. Например птица. Птица это общий концепт для любой птицы, будь-то воробей или попугай.
Абстрактный класс птицы может иметь не только абстрактные методы, а и методы с реализацией.
Например.
Любая птица имеет крылья. Махание крыльями примерно ОДИНАКОВОЕ у всех птиц (ну по крайней мере представим так). Соответственно можно создать в абстрактном классе не абстрактный, а обычный метод с реализацией для махания крыльями и все классы птиц, которые наследуют от абстрактного класса Птица будут по умолчанию пользоваться методом для махания крыльями из абстрактного класса.
Абстрактный же метод в абстрактном классе Птица будет иметь смысл определить в таком случае:
Любая птица издает какие-то звуки. Но в этом уже случае почти все птицы издают РАЗНЫЕ звуки. Значит в абстрактном классе Птица должен быть абстрактный метод для издавания звуков, который наследующие от этого абстрактного класса птицы обязаны переопределить.
То есть суть в том, что если мы знаем, что у класса, который мы создаем будут наследники и у всех них будет метод, который будет выполнять одно и то же действие (например, издавание звуков у птиц), но результат этого метода у всех наследников будет разным (разные звуки), то есть смысл объявить создаваемый нами класс абстрактным и объявить этот метод абстрактным.
Из примеров абстрактных классов можно еще привести, например, Форма (форму реализует например куб и треугольник), средство передвижения (реализует машина или велосипед)
Воспринимайте абстрактный класс как недопиленный класс, который наследники должны допилить по своему посредством реализации абстрактных методов этого абстрактного класса. Недопиленный он потому что в нем всё же присутствуют реализации (пример метода махания крыльями), но в нем и хватает абстрактных методов, которые должны допилить наследники.
Поясним на примере:
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
мин.
Статические поля
10
мин.
Внутренний класс
12
мин.