4

Mi pregunta es por qué todos los objetos desciende de la clase Object. Es una cosa que no entiendo y me gustaría saber el porqué. Lo único que sé de esa clase es que es el abuelo, digamos, y que el extends se pone sólo y no se ve.

pablohs1986
  • 313
  • 2
  • 12
Javier G.Raya
  • 1,763
  • 1
  • 3
  • 29

2 Answers2

6

Todo hereda de la clase Object para facilitar el manejo de cualquier objeto de cualquier clase de manera uniforme.

La clase Object tiene funcionalidad que es común a todos los objetos de cualquier clase, o métodos por defecto para que no tengas que programarlos tú, como el método equals(Object) o el método toString(), que ya tienen una implementación por defecto que solo hay que re definir en caso de necesitar algo más específico.

Además, el propio concepto de objeto tiene características que son comunes a cualquier objeto que puedas crear, como por ejemplo:

  • Todos los objetos tienen un identificador único de objeto llamado OID, que no depende de la clase, y que lo identifica para la máquina virtual o JVM, que en algunos casos puede ser una dirección de memoria y en otros un número entero sin significado alguno más que identificar de manera unívoca a cada objeto.
  • Todos los objetos se pueden comparar entre ellos mediante el método equals.
  • Todos los objetos son instancia de una clase, por lo que en el propio objeto hay una referencia a la clase a la que pertenece, que puedes obtener mediante el método getClass(), ya que una variable puede cambiar su tipo en tiempo de ejecución (si declaras una variable Object o puedes asignarle cualquier objeto, como un String, y la clase en tiempo de ejecución será String, cuando haces algo así: Object o = new String("Cadena");).
  • Todos los objetos poseen miembros, que pueden ser campos, métodos y constructores.
  • Todos los objetos son susceptibles de clonarse (en este caso es responsabilidad nuestra, no de la clase Object).

Como ves, sean de la clase que sean, todos los objetos tienen características y comportamientos comunes que se engloban bajo la clase Object.

Eequiis
  • 1,807
  • 4
  • 19
2

¿Por qué todo desciende de la clase Object Java?

La razón del porque todo desciende de la clase Object, es para evitar la redundancia de código y aprovechar el uso del polimorfismo.

Todo esto se entiende mejor con un ejemplo, imagínate que tienes varios objetos de tipo Persona y necesitas mantenerlo en una colección.

Entonces, una posible solución sería crear una clase llamada ArrayList_Personas:

class Persona {}

class ArrayList_Personas
{
    private Persona[] per;
    
    public ArrayList_Personas()
    {
        per = new Persona[10];
    }
    
    public void add(Persona e)
    {
        //code
    }
     //.. other methods.
}

Sí observamos, nos daremos cuenta que esta clase solo servirá para almacenar objetos de tipo Persona, si quisiera, por ejemplo, usar esta clase para guardar objetos de otros tipos, no servirá.

Así que tocará escribir una nueva clase por cada tipo. El problema de este enfoque, es que el código se hará repetitivo, ya que cada método (add, remove, etc.) tendrá la misma implementación.

Entonces para evitar esta redundancia, podemos usar la clase Object en la clase ArrayList y lograr que funcione para cualquier tipo de dato:

class ArrayList
{
    private Object[] obs;
    
    public ArrayList()
    {
        obs = new Object[10];
    }
    
    public void add(Object e)
    {
        //code
    }
    //.. other methods.
}

Como toda clase hereda de Object, se puede hacer uso del polimorfismo, así que por ejemplo, el parámetro e del método add, podrá hacer referencia a cualquier objeto, debido a que, el tipo del objeto será un subtipo de Object (supertipo).

MrDave1999
  • 7,491
  • 1
  • 7
  • 22