## La Clase Object

La clase Object está situada en la parte más alta del árbol de la herencia en el entorno de desarrollo de Java. Todas las clases del sistema Java son descendentes (directos o indirectos) de la clase Object. Esta clase define los estados y comportamientos básicos que todos los objetos deben tener, como la posibilidad de compararse unos con otros, de convertirse a cadenas, de esperar una condición variable, de notificar a otros objetos que la condición varible a cambiado y devolver la clase del objeto.

### El método equals()

> equals() se utiliza para comparar si dos objetos son iguales. Este método devuelve true si los objetos son iguales, o false si no lo son. Observe que la igualdad no significa que los objetos sean el mismo objeto. Consideremos este código que compara dos enteros:

>     Integer uno = new Integer(1), otroUno = new Integer(1);

>     if (uno.equals(otroUno))
>         System.out.println("Los objetos son Iguales");

> Este código mostrará Los objetos son Iguales aunque uno y otroUno referencian a dos objetos distintos. Se les considera iguales porque su contenido es el mismo valor entero.

> Las clases deberiacute;an sobreescribir este método proporcionando la comprobación de igualdad apropiada. Un método equals() debería comparar el contenido de los objetos para ver si son funcionalmente iguales y devolver true si es así.

### El método getClass()

> El método getClass() es un método final (no puede sobreescribirse) que devuelve una representación en tiempo de ejecución de la clase del objeto. Este método devuelve un objeto Class al que se le puede pedir varia información sobre la clase, como su nombre, el nombre de su superclase y los nombres de los interfaces que implementa. El siguiente método obtiene y muestra el nombre de la clase de un objeto:

>     void PrintClassName(Object obj) {
>         System.out.println("La clase del Objeto es " +
>     		obj.getClass().getName());
>     }

> Un uso muy manejado del método getClass() es crear un ejemplar de una clase sin conocer la clase en el momento de la compilación. Este método de ejemplo, crea un nuevo ejemplar de la misma clase que obj que puede ser cualquier clase heredada desde Object (lo que significa que podría ser cualquier clase):

>     Object createNewInstanceOf(Object obj) {
>         return obj.getClass().newInstance();
>     }

### El método toString()

> Este método devuelve una cadena de texto que representa al objeto. Se puede utilizar toString para mostrar un objeto. Por ejemplo, se podría mostrar una representación del Thread actual de la siguiente forma:

>     System.out.println(Thread.currentThread().toString());
>     System.out.println(new Integer(44).toString());

> La representación de un objeto depende enteramente del objeto. El String de un objeto entero es el valor del entero mostrado como texto. El String de un objeto Thread contiene varios atributos sobre el thread, como su nombre y prioridad. Por ejemplo, las dos líneas anteriores darían la siguiente salida:

>     Thread[main,5,main]
>     4

> El método toString() es muy útil para depuración y también puede sobreescribir este método en todas las clases.

### Otros métodos de Object cubiertos en otras lecciones o secciones

> La clase Object proporciona un método, finalize() que limpia un objeto antes de recolectar la basura. Este método se explica en la lección Eliminar Objetos no Utilizados. También en: Escribir un Método finalize() puedes ver cómo sobreescribir este método para manejar las necesidades de finalización de las clases

> La clase Object tambiém proporciona otros cinco métodos:

> - notify()
> - notifyAll()
> - wait() (tres versiones)
> que son críticos cuando se escriben programas Java con múltiples thread. Estos métodos ayudan a asegurarse que los thread están sincronizados y se cubren en Threads de Control.

Ozito