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() с переменной 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(...) вызовет конструктор суперкласса.

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

enter image description here


Автономный пример:

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() для вызова родительского конструктора?

Да.

Pls объясняет о Super().

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

Здесь официальный учебник

Ответ 5

Да, super() (строчный) вызывает конструктор родительского класса. Вы можете включить аргументы: super(foo, bar)

Существует также ключевое слово super, которое вы можете использовать в методах для вызова метода суперкласса

Быстрый google для "Java super" приводит к this

Ответ 6

Вызов супер-конструктора без аргументов - это просто трата пространства экрана и времени программиста. Компилятор генерирует точно такой же код, независимо от того, записываете ли вы его или нет.

class Explicit() {
    Explicit() {
        super();
    }
}

class Implicit {
    Implicit() {
    }
}

Ответ 7

Это правильно. Супер используется для вызова родительского конструктора. Итак, предположим, что у вас есть такой блок кода

class A{
    int n;
    public A(int x){
        n = x;
    }
}

class B extends A{
    int m;
    public B(int x, int y){
        super(x);
        m = y;
    }
}

Затем вы можете присвоить значение переменной-члену n.

Ответ 8

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

public class Superclass {

    public void printMethod() {
        System.out.println("Printed in Superclass.");
    }
}

Вот подкласс подкласса Subclass, который переопределяет printMethod():

public class Subclass extends Superclass {

    // overrides printMethod in Superclass
    public void printMethod() {
        super.printMethod();
        System.out.println("Printed in Subclass");
    }

    public static void main(String[] args) {
        Subclass s = new Subclass();
        s.printMethod();    
    }
}

Внутри подкласса простое имя printMethod() относится к объявлению в подклассе, которое переопределяет значение в суперклассе. Итак, чтобы ссылаться на printMethod(), унаследованный от Superclass, Subclass должен использовать квалифицированное имя, используя super, как показано. Компиляция и выполнение подкласса печатает следующее:

Отпечатано в суперклассе. Отпечатано в подклассе Конструкторы подклассов

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

public MountainBike(int startHeight, int startCadence,int startSpeed,
                    int startGear) {
    super(startCadence, startSpeed, startGear);
    seatHeight = startHeight;
}   

Вызов конструктора суперкласса должен быть первой строкой в ​​конструкторе подкласса.

Синтаксис для вызова конструктора суперкласса

супер();
или: super (список параметров); С super() вызывается конструктор без аргументов суперкласса. С супер (список параметров) вызывается конструктор суперкласса с соответствующим списком параметров.

Ответ 9

Я видел все ответы. Но все забыли упомянуть один очень важный момент:

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

Ответ 10

Просто супер(); один будет вызывать конструктор по умолчанию, если он существует в классе суперкласса. Но вы должны явно написать конструктор по умолчанию самостоятельно. Если вы не используете Java, вы создадите один для вас без каких-либо реализаций, сохраните super();, ссылаясь на универсальный объект Суперкласса, и вы не можете вызвать его в подклассе.

public class Alien{
   public Alien(){ //Default constructor is written out by user
   /** Implementation not shown…**/
   }
}

public class WeirdAlien extends Alien{
   public WeirdAlien(){
   super(); //calls the default constructor in Alien.
   }

}

Ответ 11

Например, при автоматизации селена у вас есть объект PageObject, который может использовать его родительский конструктор следующим образом:

public class DeveloperSteps extends ScenarioSteps {

public DeveloperSteps(Pages pages) {
    super(pages);
}........

Ответ 12

Конструкторы
В конструкторе вы можете использовать его без точки для вызова другого конструктора. super вызывает конструктор в суперклассе; this вызывает конструктор в этом классе  :

public MyClass(int a) {
  this(a, 5);  // Here, I call another one of this class constructors.
}

public MyClass(int a, int b) {
  super(a, b);  // Then, I call one of the superclass constructors.
}

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

Методы
В любом методе вы можете использовать его с точкой для вызова другого метода. super.method() вызывает метод в суперклассе; this.method() вызывает метод в этом классе  :

public String toString() {
  int    hp   = this.hitpoints();  // Calls the hitpoints method in this class
                                   //   for this object.
  String name = super.name();      // Calls the name method in the superclass
                                   //   for this object.

  return "[" + name + ": " + hp + " HP]";
}

super полезен в определенном сценарии: если ваш класс имеет тот же метод, что и ваш суперкласс, Java предположит, что вы хотите его в своем классе; super позволяет вместо этого запрашивать метод суперкласса. this полезен только как способ сделать ваш код более читаемым.

Ответ 13

каждый конструктор имеет первый оператор как вызов super() или this(), по умолчанию вызов super()

Ответ 14

Ключевое слово супер может использоваться для вызова конструктора суперкласса и ссылки на член суперкласса

Когда вы вызываете super() с помощью правильных аргументов, мы вызываем конструктор Box, который инициализирует переменные ширина, высота и глубина, ссылаясь на нее, используя значения соответствующих параметров. Остается только инициализировать свой вес добавленной стоимости. В случае необходимости вы можете сделать теперь переменные класса Box как private. Поместите в поля частного модификатора класса Box и убедитесь, что вы можете получить к ним доступ без каких-либо проблем.

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

public class Box {

    int width;
    int height;
    int depth;

    Box(int w, int h, int d) {
        width = w;
        height = h;
        depth = d;
    }

    public static void main(String[] args){
        HeavyBox heavy = new HeavyBox(12, 32, 23, 13);
    }

}

class HeavyBox extends Box {

    int weight;

    HeavyBox(int w, int h, int d, int m) {

        //call the superclass constructor
        super(w, h, d);
        weight = m;
    }

}

Ответ 15

супер - это ключевое слово. Он используется внутри определения метода подкласса для вызова метода, определенного в суперклассе. Частные методы суперкласса нельзя назвать. Ключи super могут быть вызваны только общедоступными и защищенными методами. Он также используется конструкторами классов для вызова конструкторов его родительского класса.

Отметьте здесь для дальнейшего объяснения.

Ответ 16

Как уже говорилось, внутри конструктора по умолчанию есть неявный super(), вызываемый в первой строке конструктора.

Этот super() автоматически вызывает цепочку конструкторов, начиная с верхней части иерархии классов, и перемещается вниз по иерархии.

Если бы в иерархии классов программы было более двух классов, сначала вызывался бы конструктор высшего класса по умолчанию.

Вот пример этого:

class A {
    A() {
    System.out.println("Constructor A");
    }
}

class B extends A{

    public B() {
    System.out.println("Constructor B");
    }
}

class C extends B{ 

    public C() {
    System.out.println("Constructor C");
    }

    public static void main(String[] args) {
    C c1 = new C();
    }
} 

Выше приведено:

Constructor A
Constructor B
Constructor C

Ответ 17

Супер ключевое слово в java

Супер ключевое слово - это ссылочная переменная, которая используется для ссылки на объект родительского класса.

Зачем использовать ключевое слово super в java?

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

Супер ключевое слово на уровне метода?

Супер ключевое слово также используется для вызова метода родительского класса. Супер ключевое слово должно использоваться в случае переопределения метода.

При использовании ключевого слова Super на уровне метода?

Использование ключевого слова Super, когда имя метода базового класса и имя метода производного класса имеют одинаковое имя.

http://www.tutorial4us.com/java/java-super-keyword