0
public class EqualsTest {
  public static <T> boolean equalTest(T o1, T o2) {
      return o1.equals(o2);
  }
  public static void main(String[] args) {
      EqualsTest et1 = new EqualsTest();
      EqualsTest et2 = new EqualsTest();
      System.out.println(et1.equals(et2));
      System.out.println(equalTest(et1, et2));
  }
  public boolean equals(Object o) {
      if (o instanceof EqualsTest) {
          System.out.println("equals(Object)");
          return true;
      }
      return false;
  }
  public boolean equals(EqualsTest et) {
      System.out.println("equals(EqualsTest)");
      return this.equals((Object)et);
  }
}
4

11 に答える 11

14

何もありません、それは暗黙的です。明示的にクラスを指定しないためextends、暗黙的に。を拡張しObjectます。また、Objectには引数なしのコンストラクターがあるため、暗黙的にそのコンストラクターを呼び出します。

実際、クラスには次のように記述されたコンストラクターを含めることができ、次のようになります。

public class EqualsTest {
    public EqualsTest() {
        super();
    }

    //the methods...
}

拡張するクラスに'no-arg'コンストラクター(暗黙的または明示的)がない場合は、暗黙的コンストラクターを使用できません。明示的なコンストラクターを指定した場合、暗黙的な引数なしのコンストラクターは作成されません。

于 2012-11-05T17:11:32.750 に答える
2

クラスにはコンストラクターが定義されていないため、Javaはコンパイル時にデフォルトコンストラクターを追加します。http://en.wikipedia.org/wiki/Default_constructor#Java_and_C.23を確認してください

于 2012-11-05T17:13:01.057 に答える
2

クラスに明示的なコンストラクターはありません。implicit次のように、ステートメントでクラスのコンストラクターを使用してObjectいます。

  EqualsTest et1 = new EqualsTest();

理解のために、コンストラクターは通常次のように定義されます。

  public EqualsTest(){ //without param
  }


  public EqualsTest(int param1){ //with one param
  }

注意:コンストラクターと他のメソッドの主な違いは次のとおりです。コンストラクターはクラスと同じ名前であり、戻り型はありません。

于 2012-11-05T17:13:06.287 に答える
2

明示的に宣言されたコンストラクターのないすべてのJavaクラスは、フォームのデフォルトの引数なしコンストラクターを取得します

public ClassName()
{
  super();
}

暗黙のコンストラクターの中には、クラスのスーパークラス(デフォルトではObject)のコンストラクターへの呼び出しがあります。したがって、「super();」

于 2012-11-05T17:13:07.290 に答える
2

コンストラクターを指定しない場合は、コンストラクターが提供されます。提供する場合は、デフォルトであるものをオーバーライドする必要があります。ここで、コンストラクターを提供しました。

于 2012-11-05T17:13:25.720 に答える
2

クラスにコンストラクターがない場合は、暗黙のコンストラクターが作成されます。

public EqualsTest(){}

そこになります。パラメーターを受け取るコンストラクターを作成すると、この暗黙のコンストラクターが失われます。引数のないコンストラクターが必要な場合は、コンストラクターを作成する必要があります。

于 2012-11-05T17:13:29.863 に答える
2

このmainメソッドは、アプリケーションへのエントリポイントです。起動時に呼び出され、ここではインスタンス化されません。必要に応じて、コンストラクターを作成できます。

public class Main {
    /**
     * Main.
     * @param args
     */
    public static void main(String[] args) {
        Main main = new Main();
        // do something more
    }

    public Main() {
        // do something
    }
}

Main私のコードでわかるように、インスタンス化することもできます。この場合、コンストラクターを作成できます。Mainそれ以外Objectの場合は、デフォルトのコンストラクターが呼び出されます。

あなたもこれを行うことができますそれはあなたにとって理にかなっています:

public class Main {
    /**
     * Main.
     * @param args
     */
    public static void main(String[] args) {
        Main main = new Main("some param");
    }

    public Main() {
        // do something
    }

    public Main(String someParameter) {
        this();
    }

}

ただし、介入Mainがないとクラスはインスタンス化されないことに注意してください。

于 2012-11-05T17:14:10.340 に答える
2

指定しない場合、コンストラクターは暗黙的です。

つまり、を呼び出すことでそのクラスをインスタンス化できますnew EqualsTest()

代わりに、引数を使用してコンストラクターを定義すると、この機能が失われ、必要に応じて、デフォルトの引数なしコンストラクターのコードも作成する必要があります。

于 2012-11-05T17:14:41.253 に答える
2

コンストラクターが指定されていない場合は、暗黙のコンストラクターがあります。あなたの場合

 public EqualsTest(){
     super();
 }

コンストラクターを宣言すると、この暗黙のコンストラクターはもう存在しないため、引数なしのコンストラクターを明示的に宣言する必要があります。

于 2012-11-05T17:15:22.300 に答える
2

Javaは、明示的なコンストラクターが提供されていない場合に、引数をとらず、特別なアクションや初期化を実行しないデフォルトのコンストラクターを提供します。

暗黙のデフォルトコンストラクターによって実行される唯一のアクションは、super()呼び出しを使用してスーパークラスコンストラクターを呼び出すことです。

于 2012-11-05T17:17:29.340 に答える
2

オブジェクトクラスコンストラクターを呼び出している暗黙のコンストラクターがあなたの場合にあります

暗黙の構成は次のようになります

public  EqualsTest()
{
 super();
}
于 2012-11-05T17:23:10.927 に答える