Я просто использовал конструктор генерации Eclipse с использованием функции полей, и он предоставил мне следующую конструкцию:

public Credentials(String userName, String password) {
    super();
    this.userName = userName;
    this.password = password;
}

Класс Credentials явно не расширяет другой класс, поэтому я думаю, он расширяет Object. Для чего нужен звонок super();?

2
fweigl 13 Мар 2014 в 13:34
2
 – 
Rahul
13 Мар 2014 в 13:35
Это никак не повлияет, поскольку класс Object ничего не инициализирует в конструкторе по умолчанию.
 – 
Kick
13 Мар 2014 в 13:36
Super() — это специальное использование ключевого слова super, когда вы вызываете родительский конструктор без параметров. Как правило, ключевое слово super можно использовать для вызова переопределенных методов, доступа к скрытым полям или вызова конструктора суперкласса.
 – 
Sajad Karuthedath
13 Мар 2014 в 13:36
В этом случае ничего не получится
 – 
Klemens Morbe
13 Мар 2014 в 13:37
К вашему сведению, каждый класс неявно расширяется из класса Object.
 – 
Rahul
13 Мар 2014 в 13:37

4 ответа

Лучший ответ

Если бы вы определили свой конструктор как:

public Credentials(String userName, String password) {
    this.userName = userName;
    this.password = password;
}

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

Класс Credentials явно не расширяет другой класс, поэтому я думаю, он расширяет Object. Что такое super (); звонок хорош для?

Но ваш класс неявно расширяет Object, поэтому будет выполнен вызов Object().

5
christopher 13 Мар 2014 в 16:01
1
Черт. Ваша приверженность семантическим абсолютам меня взбесила и разозлила. Я сделаю это @Keppil.
 – 
christopher
13 Мар 2014 в 13:47
Да, думаю, шутки закончились. Я выбрал гораздо более тонкую альтернативу @Keppil
 – 
christopher
13 Мар 2014 в 16:01

Ключевое слово super - это ссылка на "включающий" экземпляр текущего суперкласса.

Вы можете использовать его для доступа к методам или полям суперкласса (если они видимы). Если у вашего класса нет суперкласса (указанного как class Credentials extends SuperclassName), суперклассом будет автоматически Object.

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

Примере:

class A {
  private String m_name;
  public A(String name){
    m_name = name;
  }
}

class B extends A {
  public B(String firstName, String lastName){
    //this calls the constructor of A
    super(firstName + " " + lastName);
  }
}
1
f1sh 13 Мар 2014 в 13:40

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

Чтобы использовать if для аргументов, например super (ваш аргумент), он вызовет конструктор, который принимает один параметр типа аргумента (если существует).

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

0
Lucian Novac 13 Мар 2014 в 13:37
Любая дополнительная информация, которая улучшит ответ, будет оценена
 – 
Lucian Novac
13 Мар 2014 в 13:40

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

Если родительский класс не имеет конструктора без аргументов, и вы не будете вызывать другой конструктор, ваш код не будет компилироваться

0
user902383 13 Мар 2014 в 13:44