Наследование в Java
Наследование в Java: ключевое слово extends, переопределение методов, вызов родителя через super и иерархия классов.
Наследование позволяет создать новый класс на основе существующего: класс-потомок получает поля и методы родителя и может добавлять свои или изменять унаследованные.
Ключевое слово extends
Класс-потомок объявляют с extends. Он автоматически получает всё, что есть в родителе.
class Animal {
String name;
void eat() {
System.out.println(name + " ест");
}
}
class Dog extends Animal { // Dog наследует Animal
void bark() {
System.out.println(name + " лает"); // name достался от Animal
}
}
Dog d = new Dog();
d.name = "Рекс";
d.eat(); // метод родителя
d.bark(); // собственный метод
Вывод:
Рекс ест Рекс лает
Переопределение методов
Потомок может заменить унаследованный метод своей версией — это переопределение (override). Метод помечают аннотацией @Override.
class Animal {
void sound() {
System.out.println("Какой-то звук");
}
}
class Cat extends Animal {
@Override
void sound() {
System.out.println("Мяу");
}
}
Animal a = new Cat();
a.sound(); // вызовется версия Cat
Вывод:
Мяу
Ключевое слово super
super обращается к родителю: вызывает его конструктор или переопределённый метод. Вызов super(...) должен быть первой строкой конструктора потомка.
class Animal {
String name;
Animal(String name) {
this.name = name;
}
}
class Dog extends Animal {
String breed;
Dog(String name, String breed) {
super(name); // вызываем конструктор Animal
this.breed = breed;
}
}
Dog d = new Dog("Рекс", "Овчарка");
System.out.println(d.name + " — " + d.breed);
Вывод:
Рекс — Овчарка
В Java класс может наследовать только один родитель (нет множественного наследования классов). Все классы неявно наследуют общий класс
Object.
Коротко
- Наследование (
extends) передаёт потомку поля и методы родителя. - Потомок может переопределить метод (
@Override) своей версией. superвызывает конструктор или метод родителя;super(...)— первой строкой конструктора.- В Java только одиночное наследование классов.
Проверьте себя
1. Каким ключевым словом класс наследует другой класс?
Aimplements
Binherits
Cextends
Dsuper
2. Для чего нужно ключевое слово super?
AСоздать новый объект
BОбъявить константу
CОбратиться к конструктору или методу родителя
DЗавершить программу
3. Сколько классов-родителей может напрямую наследовать класс в Java?
AСколько угодно
BТолько один
CРовно два
DНи одного