8

Object以外のスーパークラスを持たずにコンストラクターが'super()'を呼び出すと、(もしあれば)どうなりますか?そのようです:

public class foo implements Serializable, Comparable {

  int[] startPoint;

  public foo() {

    super();

    startPoint = {5,9};
  }
}

編集:それで、これが何もしないのなら、なぜ誰かがそれをコードで明示的に書くのでしょうか?その行を削除しただけで違いはありますか?

4

7 に答える 7

11

コンストラクターから行を削除することは常にOKでsuper();あり、を拡張するクラスのコンストラクターについては特に何もありませんObject。nullaryスーパークラスコンストラクターの呼び出しは常に暗示されているため、書き留めるかどうかに関係なく、常にまったく同じセマンティクスを取得します。

これは、データベース接続の開始やGUI全体など、何か大きなことを行うスーパークラスコンストラクターの呼び出しを省略すると、実際にを記述したかどうかに関係なく、すべてが発生することに注意してくださいsuper();

于 2012-11-26T20:28:12.497 に答える
8

super()は、明示的または暗黙的に行われるコンストラクターの最初の呼び出しです。(ただし、もちろん、親のコンストラクターに一致するようにパラメーターを変更する必要がある場合があります。)

あなたのコード:

public foo() 
{
    startPoint = {5,9};
}

上記のコードからコンパイラが認識するもの:

public foo()
 {
    super();
    startPoint = {5,9};
 }

したがってsuper()、コードに明示的に配置するかどうかに関係なく呼び出されます。すべてのクラスはクラスから派生しているため、クラスには中間の親がないため、呼び出しObjectでObjectのコンストラクターを呼び出しています。super()

于 2012-11-26T20:20:17.863 に答える
7

と呼ばれるスーパークラスが常に存在Objectするため、のコンストラクターを呼び出します。Object

于 2012-11-26T20:19:07.050 に答える
2

Object()これは、パラメーターを持たないコンストラクターを持つ他のスーパークラスがあるかのように、コンストラクターを呼び出すだけです。

于 2012-11-26T20:20:02.237 に答える
1

あなたが言ったように、スーパークラス(オブジェクト)があります。

デフォルトのオブジェクトコンストラクターが呼び出されます。

于 2012-11-26T20:19:54.210 に答える
1

これは、空の(何もしない)Objectのコンストラクターを呼び出します。

于 2012-11-26T20:20:56.030 に答える
1

クラスが1つのクラスから拡張されていない場合、super()は常にObjectクラスのコンストラクターを呼び出します。

クラスオブジェクトは、クラス階層のルートです。すべてのクラスには、スーパークラスとしてObjectがあります。配列を含むすべてのオブジェクトは、このクラスのメソッドを実装します。

このリンクを確認してください

于 2012-11-26T20:24:18.413 に答える