2016-12-11 4 views
2

を拡張している私は、多くの場合、このようなコードを参照してください。クラスはオブジェクトを拡張する場合Java。クラスのスーパーコールは、オブジェクト

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

、スーパー()の呼び出しは何もしません、私が知っているように、Objectコンストラクタを呼び出します。それではなぜsuper()を呼び出す必要がありますか?私はその特別な場合に興味があります。なぜなら、super()はObject()を参照しているため何もしません。

+2

「super()」の呼び出しはオプションです。良い習慣ですが、それがあなたに何の目的も果たさなければ、あなたはそれをスキップすることができます。 – nullpointer

+0

味が異なります。 FWIW、私の個人的なスタイルは、明示的なスーパーコールを書くことです。スーパークラスが 'Object'であればスーパーコンストラクタが呼び出されるということを読者に思い出させます。なぜなら、' Object() 'コンストラクタが最終的に私はこの事実についての思い出がそれに値するとは思わないと思う。 –

答えて

-1

私はソースを読んでお勧めしますまず第一に - documentation. その後jb-nizetさん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のコンストラクタを呼び出しているので、それだけの知識をひけらかすことが、我々はそれを変更した場合です:それはBarを呼び出すの略

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

"最初のコンストラクタです。私が先に説明した

別の使用法は次のとおりです。

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() 
} 

は「バー」を返すになります。

関連する問題