Супер конструктор в Java - PullRequest
3 голосов
/ 13 января 2011

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

public class Contact {
    private String contactId;
   private String firstName;
    private String lastName;
    private String email;
    private String phoneNumber;

public Contact(String contactId,String firstName, String lastName,   String email,        String phoneNumber) {
    super();  //what does standalone super() define? With no args here?
    this.firstName = firstName;  
    this.lastName = lastName;     //when is this used?, when more than one args to be entered?
    this.email = email;
    this.phoneNumber = phoneNumber;
}

Super () без аргументов внутри означает, что нужно определить более одного аргумента? И делается ли это с помощью "this.xxx"?

Почему dint мы определяем в самом «общедоступном классе Contact» Почему мы снова определились и назвали его аргументы здесь?

Ответы [ 2 ]

7 голосов
/ 13 января 2011

Super () без аргументов внутри означает, что нужно определить более одного аргумента?

Нет, super() просто вызывает конструктор no-arg базового класса, в вашем случае Object.

Это ничего не делает на самом деле. Это просто делает в коде явным то, что вы создаете базовый класс с помощью конструктора no-arg. Фактически, если вы пропустите super(), он будет неявно добавлен обратно компилятором.

Так для чего же super(), если он все равно добавлен неявно? Ну, в некоторых случаях класс не имеет конструктора без аргументов. Подклассы этого класса должны явно вызывать некоторый супер-конструктор, используя, например, super("hello").

this.lastName = lastName; //when is this used?, when more than one args to be entered?

this.lastName = lastName; не имеет ничего общего с super(). Это просто говорит о том, что значение аргумента конструктора lastName должно быть присвоено переменной-члену lastName. Это эквивалентно

public Contact(String contactId, String firstName, String lastNameArg,
               String email, String phoneNumber) {
    // ...
    lastName = lastNameArg;
    // ...
6 голосов
/ 13 января 2011

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

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

В вашем случае, суперкласс Object

...