Вопрос-ответ

super() in Java

super() в Java

super() Используется для вызова родительского конструктора? Пожалуйста, объясните super().

Переведено автоматически
Ответ 1

super() вызывает родительский конструктор без аргументов.

Его можно использовать также с аргументами. Т.е. super(argument1) и он вызовет конструктор, который принимает 1 параметр типа argument1 (если существует).

Также его можно использовать для вызова методов из родительского. Т.е. super.aMethod()

Больше информации и руководства здесь

Ответ 2

Некоторые факты:


  1. super() используется для вызова непосредственного родительского элемента.

  2. super() может использоваться с членами экземпляра, то есть с переменными экземпляра и методами экземпляра.

  3. 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() with variable 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 ключевое слово перед именем функции.

Ответ 3

Исходная статья: Java: вызов super()


Да. super(...) вызовет конструктор суперкласса.

Иллюстрация:

введите описание изображения здесь



Отдельный пример:

class Animal {
public Animal(String arg) {
System.out.println("Constructing an animal: " + arg);
}
}

class Dog extends Animal {
public Dog() {
super("From Dog constructor");
System.out.println("Constructing a dog.");
}
}

public class Test {
public static void main(String[] a) {
new Dog();
}
}

С принтами:

Constructing an animal: From Dog constructor
Constructing a dog.
Ответ 4

Используется ли super() для вызова родительского конструктора?


ДА.


Пожалуйста, объясните о Super ().


super() это специальное использование super ключевого слова, при котором вы вызываете родительский конструктор без параметров. В общем, ключевое слово super может использоваться для вызова переопределенных методов, доступа к скрытым полям или вызова конструктора суперкласса.

Вот официальный учебник

java