1

たとえば、コンストラクターで初期化される HashMap を持つクラスがある場合...

public class MySuper{
   HashMap<String,String> foo;

   public MySuper(){
      foo = new HashMap<String,String>();
   }
}

私の印象 (これは間違っています) は、サブクラスで super を呼び出すだけで同じ初期化が行われるということですが、Eclipse は次の構文に満足していません...

 public class MySub extends MySuper{
      public MySub(){
         super.MySuper()
      }
   }

だから、これを行う正しい方法が何であるかに興味があります。MySuper で、初期化を行い、その上で super を呼び出す別のメソッドを作成する必要がありますか? (それが機能することはわかっています)が、拡張元のクラスでスーパーを呼び出して、コンストラクターで通常行うことを何でも実行させる方法があるという印象を受けました。

ティア

4

5 に答える 5

3

スーパークラスのパラメーターなしのコンストラクターは、サブクラスから自動的に呼び出されます。

ただし、コードで強調したい場合は、次を使用できます。

 public class MySub extends MySuper{
      public MySub(){
         super();
      }
   }

super() は、コンストラクター本体の最初のステートメントでなければなりません。

于 2012-05-27T01:54:42.763 に答える
2

super() を呼び出すだけです-また、参考までに、特定の例では、サブクラスにコンストラクターを記述する必要さえありません。スーパークラスのデフォルトコンストラクターを暗黙的に呼び出します

于 2012-05-27T01:54:22.030 に答える
1

デフォルトでは、サブクラスのデフォルト コンストラクターはスーパークラスのデフォルト コンストラクターを呼び出すので、次のように記述できます。

public MySub(){
    // super(); is automatically called at first line, so you no need call it
    // child init
}

または、子コンストラクターの最初の行でスーパークラスのコンストラクターを呼び出すことができます

public MySub(){
    super();
    // child init
}

スーパークラスpublic MySuper(int i)に呼び出したいコンストラクターがある場合は、次のように記述できます

public MySub(){
    super(100);
    // child init
}
于 2012-05-27T01:55:04.990 に答える
1

通常、何もする必要はありません。

サブクラスのコンストラクターが呼び出されると、スーパークラスの無引数コンストラクターが自動的に呼び出されます。

スーパークラスに引数のないコンストラクターがない場合、またはオーバーロードされた別のバージョンを呼び出したい場合は、明示的に via を呼び出す必要がありsuperます (そうしないと、スーパークラスのコンストラクターを呼び出す必要があるため、コードはコンパイルされません。デフォルトの引数なしのコンストラクターは利用できず、VM はどのオーバーロードを呼び出すべきかわかりません)。

次のようにします。

super() また

 public class MySub extends MySuper{
      public MySub(){
         super();
      }
   }

また

 public class MySub extends MySuper{
      public MySub(int a, int b){
         super(a, b);
      }
   }

スーパーの使用を参照してください。

于 2012-05-27T01:56:33.863 に答える
1
You have no need to call super.MySuper() because super classe's default constructor always invoke implicitly because the first line of child class's constructor is super() by default.

public class MySuper{
   HashMap<String,String> foo;

   public MySuper(){
      foo = new HashMap<String,String>();
   }
}

public class MySub extends MySuper{

}
于 2012-05-27T01:57:17.783 に答える