Наследование в Java
Last updated: 3 мая 2025 г.Наследование дает возможность одному классу получить доступ к полям и методам другого класса. Однако между этими классами должна быть логическая связь: от общего к частному.
Например, в программе ниже создаётся класс Animal
(Животное).
Затем создаётся класс Cat
(Кот), который с помощью ключевого слова extends
наследует Animal
, потому что кот — это частный случай животного, то есть кот является животным.
Животными, разумеется, являются и собака, и птица, и кенгуру и т.д., поэтому они тоже могут наследовать от Animal. То есть класс Animal
общий в том плане, что от него могут наследовать классы разных конкретных животных.
При наследовании класса Animal, класс Cat получает доступ напрямую ко всем полям и методам класса Animal.
Например, если у класса Animal
есть поля: количество ног, тип питания и т.д., то класс Cat
, наследующий Animal
, также будет обладать этими полями. И если мы создадим объект кота в методе main
, то сможем обращаться к этим полям через объект кота — как будто они определены непосредственно в классе Cat
. Таким образом, можно сказать, что создаётся единый объект, состоящий из данных класса Animal
и класса Cat
.
Рассмотрим пример:
1// Это класс Животное
2class Animal {
3 // У него два поля: тип питания и количество ног
4 private String eats;
5 private int noOfLegs;
6
7 public Animal(){}
8
9 public Animal(String food, int legs){
10 this.eats = food;
11 this.noOfLegs = legs;
12 }
13
14 //геттеры и сеттеры
15 public String getEats() {
16 return eats;
17 }
18
19 public void setEats(String eats) {
20 this.eats = eats;
21 }
22
23 public int getNoOfLegs() {
24 return noOfLegs;
25 }
26
27 public void setNoOfLegs(int noOfLegs) {
28 this.noOfLegs = noOfLegs;
29 }
30}
31
32//Наследование реализуется с помощью
33//ключевого слова extends.
34//Cat наследует Animal.
35class Cat extends Animal{
36 private String name;
37 private String color;
38
39 Cat(){}
40
41 Cat (String catName, String catColor) {
42 name = catName;
43 color = catColor;
44 System.out.println(color);
45 }
46
47 public String getName(){
48 return name;
49 }
50
51 public void setName(String catName){
52 name = catName;
53 }
54
55 public String getColor(){
56 return color;
57 }
58
59 public void setColor(String catColor){
60 color = catColor;
61 }
62
63 void sayMeow(){
64 System.out.println("Meow");
65 }
66}
67
68class Inheritance {
69 public static void main(String[] args){
70 Cat somecat = new Cat();
71 //Через объект класса Cat
72 //имеем доступ к методам
73 //setNoOfLegs и getNoOfLegs класса Animal
74 //благодаря наследованию.
75 somecat.setNoOfLegs(4);
76 System.out.println(somecat.getNoOfLegs());
77 }
78}
Вывод:

Основное преимущество наследования очевидно — уменьшение количества кода за счет того, что довольно большая часть кода может быть вынесена в класс родитель, а наследники этот код могут просто использовать, так сказать, “подключаясь” с помощью extends
к классу родителю.
Кроме того, наследование помогает логично организовать структуру программы — от общего к частному — и упрощает сопровождение: изменения в коде родителя автоматически отражаются во всех наследниках.
Следующие уроки
Полиморфизм
15
мин.
Абстрактный класс
16
мин.
Интерфейсы в Java
13
мин.