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.
-
3Es un tema de concepto: toda instancia de una clase **es un objeto**. Literalmente. De ese modo puedes definir las características comunes que ha de tener un objeto. – Pablo Lozano Sep 02 '20 at 08:31
-
muchas gracias :) – Javier G.Raya Sep 02 '20 at 08:39
2 Answers
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 oJVM
, 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 variableObject o
puedes asignarle cualquier objeto, como unString
, 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
.
- 1,807
- 4
- 19
¿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).
- 7,491
- 1
- 7
- 22