diferentes clases tienen diferentes criterios para lo que hace que los objetos 2 "iguales". Normalmente, es igual a() devuelve verdadero si se trata del mismo objeto:
Object a = new Object();
Object b = new Object();
return(a.equals(b));
Esto devolverá falso, apesar de que ambos son clases "objeto", no son la misma instancia. a.equals(a)
devolverá verdadero.
Sin embargo, en casos como una cadena, puede tener 2 casos diferentes, pero la igualdad cadena se basa en los caracteres literales que componen esos Cuerdas:
String a = new String("example");
String b = new String("example");
String c = new String("another");
a.equals(b);
a.equals(c);
Estas son todas diferentes instancias de la cadena, pero la primeros iguales se devuelven verdadero porque ambos son "ejemplo", pero el segundo no debido "ejemplo" no es "otro".
No tendrá que anular equals() para cada clase, solo cuando haya un caso especial para igualdad, como una clase que contenga 3 cadenas, pero solo la primera cadena se usa para determinar la igualdad. En el ejemplo que usted envió, no podría haber sido otro campo, description
que puede ser diferente para 2 "Contactos" diferentes, pero 2 "Contactos" se consideran iguales si los 4 criterios de coincidencia (nombre/apellido, y el hogar de teléfono/celular números), mientras que la descripción que coincide o no coincide no funciona si 2 contactos son iguales.
Supongo que ya ha examinado la documentación, que lo explica bastante claramente: http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html [desplácese hacia abajo para equals() ya que el enlace directo no parece funcionar en los comentarios]. – NPE