Foros del Web » Programación para mayores de 30 ;) » Java »

Duda filosófica sobre "extends Object"

Estas en el tema de Duda filosófica sobre "extends Object" en el foro de Java en Foros del Web. Hola a todos, últimamente me he dado cuenta de que varias clases de java util, o de java swing (y seguro que hay más) hacen ...
  #1 (permalink)  
Antiguo 16/04/2013, 23:52
 
Fecha de Ingreso: diciembre-2012
Ubicación: Madrid
Mensajes: 21
Antigüedad: 11 años, 10 meses
Puntos: 0
Duda filosófica sobre "extends Object"

Hola a todos,

últimamente me he dado cuenta de que varias clases de java util, o de java swing (y seguro que hay más) hacen implícitamente en la definición un 'extends Object', e incluso con llamadas a super() en los constructores.

Algunos ejemplos son:

- DefaultMutableTreeNode: http://www.javadocexamples.com/javax/swing/tree/javax.swing.tree.DefaultMutableTreeNode.html

-Collections: http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html

Mi duda es, si todas las clases implícitamente heredan de Object por definición, cambia en algo hacer la llamada explícita a Object poniendo 'extends Object'?

Y, en una clase que ponga explícitamente 'extends Object' poner super() en los constructores tiene/tendría algún efecto?

Mi opinión es que si en la API lo ponen explícitamente es que algo cambiará, no?

Un saludo a todos!
  #2 (permalink)  
Antiguo 17/04/2013, 01:32
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 2 meses
Puntos: 188
Respuesta: Duda filosófica sobre "extends Object"

Salvo que Object sea otra clase diferente a java.lang.Object, no importa hacerlo.

Igual lo hacen por un convenio de notación. Seguro que existen algunas aplicaciones/herramientas que para pintar el árbol de jerarquías automatizado a partir de un conjunto de clases es necesario definir la herencia explícitamente, así que podría ser ese el motivo.

Realmente de hacer la referencia explícita cuando es implícita se encarga la jvm. Así que en cuestión de funcionalidad viene a ser lo mismo ponerlo que no ponerlo.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 17/04/2013, 04:50
 
Fecha de Ingreso: diciembre-2012
Ubicación: Madrid
Mensajes: 21
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Duda filosófica sobre "extends Object"

Gracias por responder.

Y las llamadas que se hagan a super() en los constructores de una clase que hereda de Object tienen algún objetivo?
  #4 (permalink)  
Antiguo 17/04/2013, 05:14
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 2 meses
Puntos: 188
Respuesta: Duda filosófica sobre "extends Object"

Podrías leer esto

http://devel.no-ip.org/programming/l...ndI/super.html

Aquí dice:

Nota: Si un constructor no invoca explícitamente un constructor de superclase, el compilador de Java inserta automáticamente una llamada al constructor sin argumentos de la superclase. Si la superclase no tiene un constructor sin argumentos, obtendrá un error en tiempo de compilación. Object tiene tal constructor, así que si Object es la única superclase, no hay problema.

Sin embargo, como dice aquí también: http://programandoenjava.over-blog.e...-32829724.html

Por ser métodos, los constructores también aceptan parámetros. Cuando en una clase no especificamos ningún tipo de constructor, el compilador añade uno público por omisión sin parámetros, el cual NO hace nada.

Podrías probar fácilmente si la primera aseveración es correcta de la siguiente manera.
Creas una clase A sin constructor por defecto
Creas una clase B extends A cuyo constructor por defecto llame a super()

Si al compilar da error, es que la verificación se produjo antes de que el compilador asignase el constructor por defecto, y por tanto lo que dice es cierto. Si no, es que no se produce tal problema y todo funciona de acuerdo con lo que se indica en el segundo texto.

:)
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}

Etiquetas: clase, extends
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:21.