Java .equals () instanceof sous-classe? Pourquoi ne pas appeler la super-classe égale au lieu de la rendre définitive?

Il est indiqué dans l'Objet du .equals(Object) javadoc:

Elle est symétrique: pour toute valeur non nulle de référence les valeurs de x et y,
x.equals(y) doit retourner true si et seulement si o.est égal à(x) renvoie
vrai.

Presque partout dans l'exemple de code je vois substituée .equals(Object) méthode qui utilise instanceof comme l'un des premiers tests, par exemple ici: Les problèmes ou les pièges doivent être considérés lors de la substitution equals et hashCode?

public class Person {
    private String name;
    private int age;

    public boolean equals(Object obj) {
        if (obj == null)
            return false;
        if (obj == this)
            return true;
        if (!(obj instanceof Person))
            return false;
        ...
    }

}

Maintenant avec class SpecialPerson extends Person avoir dans equals:

        if (!(obj instanceof SpecialPerson))
            return false;

nous con garantit pas que .equals() est symétrique.
Il a été discuté par exemple ici: tout-raison-de-préférez-getclass-sur-instanceof-quand-génération-est égal à

Person a = new Person(), b = new SpecialPerson();

a.equals(b);    //sometimes true, since b instanceof Person
b.equals(a);    //always false

Je devrais peut-être ajouter dans le début de SpecialPerson est égale appel direct à super?

    public boolean equals(Object obj) {
        if( !obj instanceof SpecialPerson )
            return super.equals(obj);
        ... 
        /* more equality tests here */
    }

source d'informationauteur user2622016