Прежде всего, я рекомендую прочитать источник - 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()
}
приведет возвращение «бар».
Надеюсь, вы понимаете, что вызов 'super()' является необязательным. Хорошая практика, но если это не поможет вам, вы можете пропустить ее. – nullpointer
Вкус отличается. FWIW, мой личный стиль - я пишу явный супер-вызов, чтобы напомнить себе и читателю, что супер конструктор вызывается, * кроме *, если суперкласс - это «Объект», так как я уверен, что каждый знает, что конструктор 'Object()' в конце концов и я не думаю, что напоминание об этом факте того стоит. –