Наследование в 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
Bextends
Cinherits
Dsuper
2. Для чего нужно ключевое слово super?
AСоздать новый объект
BОбратиться к конструктору или методу родителя
CОбъявить константу
DЗавершить программу
3. Сколько классов-родителей может напрямую наследовать класс в Java?
AСколько угодно
BТолько один
CРовно два
DНи одного