この equals
メソッドは、引数が互換性のない型 (すなわち、スーパタイプでもなく、equals
メソッドを定義しているクラスのスーパータイプでもサブタイプでもないクラス) なのか確かめています。
たとえば、Foo
クラスの equals
メソッドはそのように見えるかもしれません。
public boolean equals(Object o) { if (o instanceof Foo) return name.equals(((Foo)o).name); else if (o instanceof String) return name.equals(o); else return false; }
これは対称的で推移的である equals
メソッドを実現するのはとても難しいので、間違ったプラクティスと見なされています。
プロパティがなければまったく予想していない振る舞いが起こりえます。