この 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 メソッドを実現するのはとても難しいので、間違ったプラクティスと見なされています。 プロパティがなければまったく予想していない振る舞いが起こりえます。