Herramientas de usuario

Herramientas del sitio


bloque3:overrideobject

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
bloque3:overrideobject [06/03/2018 08:46] – [Override: método toString()] Fernando Valdeónbloque3:overrideobject [16/09/2024 20:53] (actual) – editor externo 127.0.0.1
Línea 1: Línea 1:
 ====== Sobrescritura de métodos de la clase Object ====== ====== Sobrescritura de métodos de la clase Object ======
-En Java la superclase de todas las clases es la clase ''Object'', y todas las clases heredan los métodos de esta clase. Cada vez que una clase hereda un método de una superclase, se tiene la oportunidad de sobrescribir el funcionamiento del método. +En Java la clase de la que heredan (directa o indirectamente) todas las clases es la clase ''Object''todas las clases heredan los métodos de esta ''Object''. Cada vez que una clase hereda un método 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 ''Override''. 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 ''Override''.
Línea 17: Línea 17:
 |Object clone()|Devuelve una copia del objeto. El objeto debe implementar la interface [[https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html|Cloneable]]| |Object clone()|Devuelve una copia del objeto. El objeto debe implementar la interface [[https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html|Cloneable]]|
 |int hashCode|Devuelve el código hash del objeto. Está enfocado en el uso de tablas //Hash// como las provistas por [[https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html|HashMap]]| |int hashCode|Devuelve el código hash del objeto. Está enfocado en el uso de tablas //Hash// como las provistas por [[https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html|HashMap]]|
-|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 finalize()|Método llamado por el recolector de basura, cuando no quedan referencias a ese objeto|
 +|Class getClass()|Devuelve la clase del objeto|
 |void notify()|Despierta un hilo de ejecución que está en estado de espera| |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 notifyAll()|Despierta todos los hilos que están en espera|
Línea 25: Línea 25:
 |void wait(long time, int nanos)|Pone en espera al hilo de ejecución| |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(), hashCode() y clone() .+Dependiendo de la finalidad de nuestra clase nos podría interesar sobrescribir unos métodos u otros.
  
 +
 +=== Impedir la sobrescritura ===
 +Todo método declarado como ''final'' en una clase, no puede ser sobrescrito. Esto ocurre también en la clase Object. Los únicos métodos que se pueden sobrescribir son: **toString(), equals(), hashCode(), clone() y finalize()**.
 ===== Generar métodos desde Eclipse ===== ===== Generar métodos desde Eclipse =====
 {{ :bloque3:sourcemenueclipse.png?250|}} {{ :bloque3:sourcemenueclipse.png?250|}}
-Eclipse ofrece la posibilidad de generar de forma automática estos algunos métodos de la clase Object.+Los IDEs ofrecen la posibilidad de generar de forma automática algunos métodos de la clase Object.
  
 Desde la pestaña ''Source'' del menu, o haciendo clic derecho en el editor de texto -> ''Source'' accedemos al siguiente menu: Desde la pestaña ''Source'' del menu, o haciendo clic derecho en el editor de texto -> ''Source'' accedemos al siguiente menu:
  
-Pulsando sobre la generación de esos métodos, eclipse nos ayuda a generarlos. El método ''toString()'' crea un String utilizando el valor de todos los atributos. Podemos modificarlo si queremos mostrar menos, o dar otro formato.+Pulsando sobre la generación de esos métodos, eclipse nos ayuda a generarlos.  
 + 
 +Por ejemplo, la implementación del método ''toString()'' devuelve un String utilizando el valor de todos los atributos. Podemos modificarlo si queremos mostrar menos, o dar otro formato.
  
 ---- ----
Línea 45: Línea 50:
 Cuando nosotros creamos una clase, puede que necesitemos tener un modo textual de representar a los distintos objetos. **Por lo que se recomienda que todas las subclases de Object lo sobrescriban**. Cuando nosotros creamos una clase, puede que necesitemos tener un modo textual de representar a los distintos objetos. **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.+Es el __programador que crea la clase quien debe elegir qué información considera oportuna__ para representar al objeto.
  
 <code java> <code java>
Línea 66: Línea 71:
 </code> </code>
  
-Una de las mayores ventajas de crear el método toString() es que podemos mostrar por consola una variable de referencia de una clase, y automáticamente se llamará al método toString() de esa clase.+La principal ventaja de sobrescribir toString() __es poder mostrar  por consola directamente una variable__ de referencia de una clase. Automáticamente se llamará al método toString() de esa clase.
  
 <code java> <code java>
Línea 77: Línea 82:
 El método equals se usa para saber si un objeto es igual a otro, devolviendo ''true'' o ''false'' El método equals se usa para saber si un objeto es igual a otro, devolviendo ''true'' o ''false''
  
-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.+Cuando dos objetos pertenecen a distinta clase, es fácil evaluarlo (nunca serán iguales). 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: Por ejemplo:
Línea 122: Línea 127:
    @Override     @Override 
    public boolean equals(Object obj){    public boolean equals(Object obj){
-      if (this == obj){+      if (this == obj){  //Si referencian al mismo objeto
          return true;          return true;
       }       }
-      if (obj == null){+      if (obj == null){  //Si lo que recibe es null
  return false;  return false;
       }       }
-      if (this.getClass() != obj.getClass()){+      if (this.getClass() != obj.getClass()){  //Si no son de la misma clase
  return false;  return false;
       }       }
-      Vehiculo other = (Vehiculo) obj; +      Persona other = (Persona) obj;  //Si sus valores no son iguales 
-      if ( ! ((this.dni.equals(obj.dni)  +      if ( ! ((this.dni.equals(other.dni)  
-         && (this.nombre.equals(obj.nombre)) +         && (this.nombre.equals(other.nombre)) 
-         && (this.edad == obj.edad))){+         && (this.edad == other.edad))){
            return false;            return false;
       }       }
-      return true;+      return true;   //Si no he devuelto false, es que son iguales
    }    }
 } }
 </code> </code>
  
-Si puede que nuestros objetos se almacenen el algún tipo de estructura //Hash// debemos de crear sobrescribir el método ''hashCode()'' en concordancia con el método ''equals()''.+Si puede que nuestros objetos se almacenen el algún tipo de estructura //Hash// debemos sobrescribir el método ''hashCode()'' en concordancia con el método ''equals()''.
  
 ---- ----
  
 (c) {{date> %Y}} Fernando Valdeón (c) {{date> %Y}} Fernando Valdeón
bloque3/overrideobject.1520325979.txt.gz · Última modificación: 16/09/2024 20:53 (editor externo)