equals
メソッドをオーバーライドする equals
メソッドを定義しています。
両方の equals
メソッドは、2つのオブジェクトが等しいかどうかの判定で、instanceof
を使用しています。
equals
メソッドは対称的 (a.equals(b) == b.equals(a)
) であることが重要なのでこれは危険を伴っています。
B が A のサブタイプなら A の equals
メソッドは引数が instanceof A
なのかチェックします。
そして、B の equals
メソッドは引数が instanceof B
なのかチェックします。
これらのメソッドによって定義された同値関係が対称的でないということです。