Некоторые факты:
super()
используется для вызова непосредственного родителя.
super()
может использоваться с членами экземпляра, т.е. переменными экземпляра и методами экземпляра.
super()
может использоваться в конструкторе для вызова конструктора родительского класса.
Хорошо, теперь давайте практически реализуем эти пункты super()
.
Проверьте разницу между программой 1 и 2. Здесь программа 2 подтверждает наше первое утверждение super()
в Java.
Программа 1
class Base
{
int a = 100;
}
class Sup1 extends Base
{
int a = 200;
void Show()
{
System.out.println(a);
System.out.println(a);
}
public static void main(String[] args)
{
new Sup1().Show();
}
}
Вывод:
200
200
Теперь проверьте программу 2 и попытайтесь выяснить основное отличие.
Программа 2
class Base
{
int a = 100;
}
class Sup2 extends Base
{
int a = 200;
void Show()
{
System.out.println(super.a);
System.out.println(a);
}
public static void main(String[] args)
{
new Sup2().Show();
}
}
Выход:
100
200
В программе 1 вывод был только производного класса. Не удалось вывести переменную ни базового класса, ни родительского класса. Но в программе 2 мы использовали super()
с переменной a
при печати ее вывода, и вместо вывода значения переменной a
производного класса, она напечатала значение переменной a
базового класса. Таким образом, это доказывает, что super()
используется для вызова непосредственного родителя.
ОК, теперь проверьте разницу между программой 3 и программой 4.
Программа 3
class Base
{
int a = 100;
void Show()
{
System.out.println(a);
}
}
class Sup3 extends Base
{
int a = 200;
void Show()
{
System.out.println(a);
}
public static void Main(String[] args)
{
new Sup3().Show();
}
}
Выход:
200
Здесь вывод равен 200. Когда мы вызвали Show()
, была вызвана функция Show()
производного класса. Но что нам делать, если мы хотим вызвать функцию Show()
родительского класса? Проверьте программу 4 для решения.
Программа 4
class Base
{
int a = 100;
void Show()
{
System.out.println(a);
}
}
class Sup4 extends Base
{
int a = 200;
void Show()
{
super.Show();
System.out.println(a);
}
public static void Main(String[] args)
{
new Sup4().Show();
}
}
Выход:
100
200
Здесь мы получаем два выхода, 100 и 200. Когда вызывается функция Show()
производного класса, она сначала вызывает функцию Show()
родительского класса, потому что внутри функции Show()
производного класс, мы вызвали функцию Show()
родительского класса, поместив ключевое слово super
перед именем функции.