Назад к вопросам
Junior — Middle
78
Какова роль и назначение ключевого слова 'super' в языке Java?
Компании, где спрашивали
Perfomance lab
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
super используется для обращения к членам родительского класса: его полям, методам и конструктору. Это нужно, когда в дочернем классе есть переопределение или затенение, и требуется явно вызвать реализацию базового класса. Обычно ожидают понимания разницы между this и super, а также правил вызова super() в конструкторе.
Определение:
super в Java — это ссылка на непосредственный родительский класс текущего объекта. С её помощью можно:
- обратиться к полю родителя, если в дочернем классе есть поле с тем же именем;
- вызвать метод родителя, если он переопределён в дочернем классе;
- вызвать конструктор родительского класса через
super().
Пример использования:
class Animal {
String name = "Animal";
Animal() {
System.out.println("Animal constructor");
}
void sound() {
System.out.println("Some sound");
}
}
class Dog extends Animal {
String name = "Dog";
Dog() {
super();
System.out.println("Dog constructor");
}
void printInfo() {
System.out.println(super.name); // поле родителя
super.sound(); // метод родителя
System.out.println(this.name); // поле текущего класса
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.printInfo();
}
}
Пояснение кода:
- При создании
new Dog()сначала вызываетсяsuper(), то есть конструкторAnimal(). - Затем выполняется конструктор
Dog(). - В методе
printInfo():super.nameобращается к полюnameизAnimal;super.sound()вызывает реализацию метода изAnimal;this.nameберёт поле текущего классаDog.
- Если бы
Dogпереопределилsound(), то вызовsound()внутриDogвызвал бы версию изDog, аsuper.sound()— изAnimal.
Ключевые моменты:
super— это ссылка на непосредственный родительский класс.- Используется для доступа к скрытым полям и переопределённым методам родителя.
super()вызывает конструктор базового класса и должен быть первым оператором в конструкторе.superиthisрешают разные задачи:this— текущий объект,super— его родительская часть.- Если конструктор родителя не вызывается явно, Java попытается вставить
super()автоматически, если это возможно.