bloque4:overrideobject
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
bloque4:overrideobject [05/03/2018 09:30] – [Normas para sobrescribir equals()] Fernando Valdeón | bloque4:overrideobject [05/03/2018 11:39] (actual) – borrado Fernando Valdeón | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
- | ====== Sobrescritura de métodos de Object ====== | ||
- | En Java la superclase de todas las clases es la clase '' | ||
- | o constructor de una superclase, se tiene la oportunidad de sobrescribir el funcionamiento del método. | ||
- | La sobrescritura de métodos heredados se usa para | ||
- | definir el comportamiento específico de un método que tiene un funcionamiento demasiado general en una superclase. Esto se denomina '' | ||
- | |||
- | === Etiqueta @Override === | ||
- | Cuando sobrescribimos métodos podemos ayudar al compilador a evaluar si hacemos lo correcto utilizando la etiqueta '' | ||
- | |||
- | |||
- | |||
- | ===== Métodos de la clase Object ===== | ||
- | La clase [[https:// | ||
- | |||
- | ^Método^Descripción^ | ||
- | |String **toString**()|Devuelve la representacion en String del objeto| | ||
- | |boolean **equals**(Object obj)|Indica si el objeto actual es igual al parametro **obj**| | ||
- | |Object clone()|Devuelve una copia del objeto. El objeto debe implementar la interface [[https:// | ||
- | |int hashCode|Devuelve el código hash del objeto. Está enfocado en el uso de tablas //Hash// como las provistas por [[https:// | ||
- | |Class getClass()|Devuelve la clase del objeto| | ||
- | |void finalize()|Método llamado por el recolector de basura, cuando no quedan referencias a ese objeto| | ||
- | |void notify()|Despierta un hilo de ejecución que está en estado de espera| | ||
- | |void notifyAll()|Despierta todos los hilos que están en espera| | ||
- | |void wait()| Pone en espera un hilo de ejecución, hasta que se llame a notify() o notifyAll()| | ||
- | |void wait(long time)|Pone en espera la cantidad de tiempo, o hasta notify() o notifyAll()| | ||
- | |void wait(long time, int nanos)|Pone en espera al hilo de ejecución| | ||
- | |||
- | Dependiendo de la finalidad de nuestra clase nos podría interesar sobrescribir unos métodos u otros. Los métodos más comunes a la hora de sobrescribir son: toString(), equals(), clone() y hashCode(). | ||
- | ===== Override: método toString() ===== | ||
- | Tal como se indica en la documentación de la clase [[https:// | ||
- | |||
- | El método toString() está enfocado en la representación de un objeto hacia una persona. La información que muestra debe ser concisa pero explicativa para que lo lea una persona. | ||
- | |||
- | El método de la clase Object devuelve un String compuesto por el nombre de la clase, una @, y el código '' | ||
- | |||
- | Cuando nosotros creamos una clase, puede que la información genérica del método original no nos sirva de mucho. **Por lo que se recomienda que todas las subclases de Object lo sobrescriban**. | ||
- | |||
- | Es el __creador de la clase quien debe elegir qué información considera oportuna__ para representar al objeto. | ||
- | |||
- | <code java> | ||
- | public class Persona{ | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | |||
- | | ||
- | | ||
- | return dni + " - " + nombre + " " + apellido1 + " " + apellido2; | ||
- | } | ||
- | } | ||
- | |||
- | |||
- | |||
- | </ | ||
- | |||
- | |||
- | |||
- | ===== Override: método equals() ===== | ||
- | El método equals se usa para saber si un objeto es igual a otro, devolviendo '' | ||
- | |||
- | Cuando dos objetos pertenecen a distinta clase, es fácil evaluarlo. Pero cuando dos objetos pertenecen a la misma clase, aunque sean objetos distintos, nos podría interesar establecer un criterio para indicar cuando son iguales. | ||
- | |||
- | Por ejemplo: | ||
- | * Con **dos objetos String distintos**, | ||
- | * Con **dos objetos LocalDate distintos**, | ||
- | |||
- | El método '' | ||
- | <code java> | ||
- | Persona persona1 = new Persona(); | ||
- | Persona persona2; | ||
- | |||
- | //Las dos variables de referencia contienen la misma dirección de memoria | ||
- | //Es decir, apuntan o referencian al mismo objeto | ||
- | persona2 = persona1; | ||
- | |||
- | //Entonces el método equals heredado de Object | ||
- | persona1.equals(persona2); | ||
- | |||
- | //Pero si contienen referencias a objetos distintos | ||
- | persona2 = new Persona(); | ||
- | |||
- | persona1.equals(persona2); | ||
- | |||
- | </ | ||
- | |||
- | Aunque establecer un criterio para comparar 2 objetos es bastante sencillo (por ejemplo 2 personas son iguales si tienen el mismo dni), se deben cumplir unas normas. | ||
- | |||
- | ==== Normas para sobrescribir equals() ==== | ||
- | Se definen unas normas que toda implementación del método [[https:// | ||
- | |||
- | * **Debe ser reflexivo**; | ||
- | * **Debe ser simétrico**; | ||
- | * **Debe ser transitivo**; | ||
- | * **Debe ser consistente**; | ||
- | * Si x es distinto de '' | ||
- | |||
- | Atendiendo a esto podemos seguir el siguiente patrón a la hora de sobrescribir este método: | ||
- | <code java> | ||
- | public class Persona{ | ||
- | |||
- | |||
- | | ||
- | | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | |||
- | ---- | ||
- | |||
- | (c) {{date> %Y}} Fernando Valdeón |
bloque4/overrideobject.1520242252.txt.gz · Última modificación: 16/09/2024 20:53 (editor externo)