Короткий ответ
Наследование — механизм ООП, при котором подкласс (наследник) создаётся на основе другого класса — суперкласса (родителя) — через ключевое слово extends и получает доступ к его не-private членам. Наследник может добавлять свои члены и переопределять унаследованные методы. В Java у класса может быть только один непосредственный родитель.
Как это работает подробнее
Отношение между наследником и родителем описывается как «является» (IS-A): Cat — это Animal. Наследование уменьшает дублирование кода и служит фундаментом полиморфизма.
- Переиспользование кода. Общие поля и методы выносятся в базовый класс, и каждый наследник не дублирует их, а просто наследует.
- IS-A и полиморфизм. Там, где ожидается
Animal, можно передатьCat: ссылка родительского типа указывает на объект наследника, и вызывается реализация метода именно наследника. - Конструкторы не наследуются. Наследник обязан вызвать конструктор родителя через
super(); компилятор добавляет такой вызов автоматически, если у родителя есть конструктор без параметров.
Пример кода
Main.java
class Animal {
void voice() {
System.out.println("Звук");
}
}
class Cat extends Animal {
@Override
void voice() {
System.out.println("Мяу");
}
}
public class Main {
public static void main(String[] args) {
Animal a = new Cat(); // IS-A: Cat — это Animal
a.voice(); // выведет «Мяу»
}
}Что использовать на практике
- Выносить в базовый класс общее состояние и поведение, избегая дублирования кода.
- Применять наследование только при отношении IS-A; в остальных случаях предпочитать композицию.