Содержание
super()
это специальное использование ключевого слова super, где вы вызываете родительский конструктор без параметров. В общем, ключевое слово super можно использовать для вызова переопределенных методов, доступа к скрытым полям или вызова конструктора суперкласса.
Если ваш метод переопределяет один из методов его суперкласса, вы можете вызвать переопределенный метод с помощью ключевого слова super.
Пример 1
Посмотрите на этот пример, мы будем использовать super и отправим параметры через конструктор:
class Animal {
public Animal(String arg) {
System.out.println("Constructing an animal: " + arg);
}
}
class Cat extends Animal {
public Cat() {
super("This is from cat constructor");
System.out.println("Constructing a cat.");
}
}
public class Test {
public static void main(String[] a) {
new Cat();
}
}
Вывод будет выглядеть так:
Построение животного: это от кота конструктора Строим собаку.
Функция cat инициализируется, затем выполняется супер-метод, который сначала вызывает Animal и, наконец, выводит строку «Создание кота».
Пример 2
Теперь взглянем на следующий пример, мы будем использовать ключевое слово super для непосредственного вызова метода из родительского класса:
class Base
{
int a = 100;
void Show()
{
System.out.println(a);
}
}
class Son extends Base
{
int a = 200;
void Show()
{
// Call Show method from parent class
super.Show();
System.out.println(a);
}
public static void Main(String[] args)
{
new Son().Show();
}
}
Вывод будет выглядеть так:
100
200
Мы выполним Show
метод из класса Son, и внутри метода Show класса son мы выполним метод show класса Base, используя super.Show
,
Заметки
Всякий раз, когда мы используем super()
или же super(arguments)
в конструкторах производного класса super всегда должен быть первым исполняемым оператором в теле конструктора производного класса, в противном случае мы получим ошибку времени компиляции (Вызов super должен быть первым оператором в конструкторе).