2016-12-11 11 views
2

Я часто вижу код вроде этого:Java. Супер вызов в класс, который расширяет объект

class MyClass{ 
     private int a; 
     public MyClass(int a){ 
      super();  //what purpose of this? 
      this.a = a; 
     } 
     //other class methods here 
} 

Если класс расширяет объект, супер() вызов вызывает конструктор объекта, который, как я знаю, ничего не делает. Тогда почему нужно вызвать super()? Меня интересует этот конкретный случай, когда super() ничего не делает, потому что он ссылается на Object().

+2

Надеюсь, вы понимаете, что вызов 'super()' является необязательным. Хорошая практика, но если это не поможет вам, вы можете пропустить ее. – nullpointer

+0

Вкус отличается. FWIW, мой личный стиль - я пишу явный супер-вызов, чтобы напомнить себе и читателю, что супер конструктор вызывается, * кроме *, если суперкласс - это «Объект», так как я уверен, что каждый знает, что конструктор 'Object()' в конце концов и я не думаю, что напоминание об этом факте того стоит. –

ответ

-1

Прежде всего, я рекомендую прочитать источник - documentation. Тогда цитата jb-nizet «s answer:

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

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

super() вызывает конструктор родительского класса. super.toString() вызовет реализацию родительского класса toString.

В вашем примере:

class MyClass{ 
     private int a; 
     public MyClass(int a){ 
      super();  //what purpose of this? 
      this.a = a; 
     } 
     //other class methods here 
} 

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

class Foo extends Bar{ 
     private int a; 
     public Foo(int a){ 
      super();  //what purpose of this? 
      this.a = a; 
     } 
     //other class methods here 
} 

он стоит для вызова Bar ' s.

Другое использование, которое я описал ранее, является:

class Bar { 
    public String toString() { 
     return "bar"; 
    } 
} 

class Foo extends Bar{ 
     String foo = "foo"; 
     public Foo(){ 
      super();  //what purpose of this? 
     } 
     public String toString() { 
      super.toString() 
} 

приведет возвращение «бар».