super () в Java

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

15 ответов


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

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

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

дополнительная информация и учебник здесь


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

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

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

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

проверить разницу между программой 1 и 2. Здесь программа 2 доказывает наше первое утверждение super() in Ява.

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

OK теперь проверьте разницу между программой 3 и программой 4


Да. 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.

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

да.

Pls объясняет о супер ().

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

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


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

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

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


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

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

class Implicit {
    Implicit() {
    }
}

это правильно. Super используется для вызова родительского конструктора. Поэтому предположим, что у вас есть кодовый блок so

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.


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

public class Superclass {

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

вот подкласс, называемый подклассом, который переопределяет 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 (), унаследованный от суперкласса, подкласс должен использовать полное имя, используя super, как показано. Компиляция и выполнение подкласса печатает следующее:

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

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

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

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

синтаксис вызова конструктора суперкласса -

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


Just super (); alone вызовет конструктор по умолчанию, если он существует суперкласса класса. Но вы должны явно написать конструктор по умолчанию самостоятельно. Если вы не создадите 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.
   }

}

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

public class DeveloperSteps extends ScenarioSteps {

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

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

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


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

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

public MyClass(int a, int b) {
  super(a, b);  // Then, I call one of the superclass's 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 полезно только как способ сделать ваш код более читаемым.


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

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

в суперклассе может быть несколько перегруженных версий конструктора, так что вы можете вызвать метод 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;
    }

}

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

Регистрация здесь для дальнейшего объяснения.


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

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

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

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

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

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

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

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

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