2012-08-16 12 views
7

He leído antes que las clases de Java son instancias de la clase Class. Pero ahora, mi profesor de informática dice que las clases de Java no son objetos.¿Las clases de Java son objetos?

¿Cuál es la verdad?

+0

¿Qué razón le dio cuando le preguntó? – EJP

+0

@EJP Dijo algo acerca de que una clase era una interfaz, aunque no recuerdo todo. – itdoesntwork

+0

Las clases de Java son de hecho objetos, incluso si es un tipo especial de objeto. Puede, por ejemplo, tener varias instancias de cualquier clase determinada 'SomeClass': simplemente cree un nuevo 'ClassLoader' y cargue 'SomeClass' otra vez; obtienes una instancia diferente para la misma clase de tiempo de compilación, potencialmente con diferentes implementaciones de métodos. –

Respuesta

15

Una clase de Java no es un objeto.

Sin embargo, cada clase Java tiene una instancia de la clase Class que lo describe.
Esas instancias son objetos.

+0

Creo que importa lo que quiere decir con "una clase de Java". ¿Qué definición de "clase" no es un objeto? El código fuente con la declaración de clase en él? –

+0

Entonces la instancia de la clase 'Clase' no es lo mismo que la clase creada con la palabra clave' clase'. Lo tengo. – itdoesntwork

+0

@MattBall: una clase es un tipo, no un objeto. – SLaks

0

Cada clase de Java, incluso java.lang.Class desciende de java.lang.Object.

EDIT:

La redacción es un poco ambigua. Las instancias de las clases de Java son definitivamente objetos. Las clases en sí mismas no pueden considerarse realmente objetos, porque no existe nada en la memoria, excepto la clase "blueprint".

+0

Objetos de clase existen en la memoria. Considere el resultado de Object.getClass(). – EJP

+0

@EJP no estoy seguro de cuál es su punto. getClass() solo funciona cuando tienes una instancia de esa clase, sí. Nunca dije lo contrario. Mi punto es que a menos que tenga una instancia, no hay nada en la memoria, solo un mapeo de clases en JVM (blueprints). – jn1kk

+0

@EJP Me parece tonto que estemos discutiendo y quitando puntos de Internet imaginarios de otras personas porque la pregunta en sí misma es ambigua. Lo encuentro aún más tonto, incluso estoy tratando de responder a esta pregunta. – jn1kk

1

La clase (su código, o incluso el código compilado en sus archivos .class) no son objetos. No tienes un objeto hasta que crees una instancia de esa clase. Por ejemplo, Java.lang.String es una clase. String s = new String("Hello world"); define un objeto de tipo String. Esa puede ser la distinción que hace tu profesor.

+0

Nuevamente, la definición de la palabra "clase" aquí importa. –

+0

De acuerdo, por eso especifico a qué se refiere mi respuesta como una 'clase' –

3

Las clases de Java no son objetos, son una abstracción.

Sin embargo, cada clase de Java tiene una instancia correspondiente de la clase java.lang.Class que lo representa. Esa representación es un objeto. Pero no debes confundir la representación con la cosa real.

La relación es algo similar a la que existe entre la música y la partitura. Aunque la notación escrita representa música, no es en sí misma la música.

Sin embargo, la diferencia rara vez importa en la práctica, siempre que sepa lo que puede y no puede hacer con los objetos java.lang.Class.

+0

Gracias, eso lo aclara. EDITAR: Me hace desear que todos los idiomas fueran tan simples como Ruby :) – itdoesntwork

+0

De todas formas, Ruby es mucho más complicado que Java. – biziclop

Cuestiones relacionadas