-2

クラスTestEquals classの main メソッドが を出力するように記述します。Puzzle3false

注: TestEquals クラスの equals メソッドをオーバーライドすることはできません。

public class Puzzle3 {
    public static void main(String[] args) {
        TestEquals testEquals = new TestEquals();
        System.out.println(testEquals.equals(testEquals));
    }
}

これを達成する方法が見つかりませんでした。コメントを共有してください

4

3 に答える 3

4

equals メソッドをオーバーライドすることはできませんが、equals メソッドをオーバーロードできない理由はありません。

メソッド Object.equals にはプロトタイプがあります。

public boolean equals(Object o) { ... }

このメソッドをオーバーライドするには、TestEquals で同じプロトタイプを使用してメソッドを作成する必要があります。ただし、問題のステートメントは、このメソッドをオーバーライドすることは許可されていないことを示しています。問題ありません。メソッドをオーバーロードすることは、タスクを達成するための有効な方法です。次のメソッド定義を TestEquals に追加するだけです。

public boolean equals(TestEquals o) { return false; }

これで完了です。

于 2012-08-28T09:15:51.640 に答える
3

以下はfalseを出力します:)

import java.io.File;
import java.io.FileNotFoundException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;

public class TestEquals {

  public static void main(String[] args) {
    TestEquals testEquals = new TestEquals();
    System.out.println(testEquals.equals(testEquals));
  }

  static {
    System.setOut(new CustomPrintStream(new PrintStream(System.out)));
  }

  public static class CustomPrintStream extends PrintStream {

    /**
     * This does the trick.
     */
    @Override
      public void println(boolean x) {
      super.println(!x);
    }

    public CustomPrintStream(File file, String csn) throws FileNotFoundException, UnsupportedEncodingException {
      super(file, csn);
    }

    public CustomPrintStream(File file) throws FileNotFoundException {
      super(file);
    }

    public CustomPrintStream(OutputStream out, boolean autoFlush, String encoding)
      throws UnsupportedEncodingException {
      super(out, autoFlush, encoding);
    }

    public CustomPrintStream(OutputStream out, boolean autoFlush) {
      super(out, autoFlush);
    }

    public CustomPrintStream(OutputStream out) {
      super(out);
    }

    public CustomPrintStream(String fileName, String csn) throws FileNotFoundException,
                                                                 UnsupportedEncodingException {
      super(fileName, csn);
    }

    public CustomPrintStream(String fileName) throws FileNotFoundException {
      super(fileName);
    }
  }
}
于 2012-08-28T11:11:43.493 に答える
3

equals をオーバーライドする代わりに、equalsをオーバーロードできます

class TestEquals {
    // a common mistake which doesn't override equals(Object)
    public boolean equals(TestEquals te) { 
          return false;
    }
}
于 2012-08-28T09:13:55.177 に答える