Наследование дает возможность одному классу получить доступ к полям и методам другого класса. Однако между этими классами должна быть логическая связь: от общего к частному.
Например, в программе ниже создаётся класс Animal
(Животное).
Затем создаётся класс Cat
(Кот), который с помощью ключевого слова extends
наследует Animal
, потому что кот — это частный случай животного, то есть кот является животным.
Животными, разумеется, являются и собака, и птица, и кенгуру и т.д., поэтому они тоже могут наследовать от Animal. То есть класс Animal
общий в том плане, что от него могут наследовать классы разных конкретных животных.
При наследовании класса Animal, класс Cat получает доступ напрямую ко всем полям и методам класса Animal.
Например, если у класса Animal
есть поля: количество ног, тип питания и т.д., то класс Cat
, наследующий Animal
, также будет обладать этими полями. И если мы создадим объект кота в методе main
, то сможем обращаться к этим полям через объект кота — как будто они определены непосредственно в классе Cat
. Таким образом, можно сказать, что создаётся единый объект, состоящий из данных класса Animal
и класса Cat
.
Рассмотрим пример:
Вывод:

Основное преимущество наследования очевидно — уменьшение количества кода за счет того, что довольно большая часть кода может быть вынесена в класс родитель, а наследники этот код могут просто использовать, так сказать, “подключаясь” с помощью extends
к классу родителю.
Кроме того, наследование помогает логично организовать структуру программы — от общего к частному — и упрощает сопровождение: изменения в коде родителя автоматически отражаются во всех наследниках.
Table of Contents
Полиморфизм
Полиморфизм в Java: переопределение методов, использование одного имени для разных задач. Практические примеры.
Абстрактный класс
Разберитесь с абстрактными классами в Java: общие концепты, абстрактные методы, ключевое слово abstract. Практические примеры.
Интерфейсы в Java
Изучите интерфейсы в Java: как определять поведение классов, ключевые слова interface и implements, отличие от абстрактных классов. Примеры кода и сравнение.