No está claro para mí. Tal vez si analizamos las especificaciones encontraremos evidencia de que las clases internas deberían tratarse de la misma manera que las clases normales. Sin embargo, en espíritu, una clase interna depende de la instancia externa, la clase no existe más allá de la instancia. Esto es diferente de las clases "normales" cuya existencia es básicamente perpetua. Dos clases internas de dos instancias externas, por supuesto, están relacionadas entre sí, siendo creadas por el mismo código fuente, pero eso no significa que deben ser idénticas o incluso iguales.
Existen evidencias de que los diseñadores de Java pensaban de esta manera, que una clase interna en espíritu vive dentro del alcance de la instancia externa. Por ejemplo, la curiosa sintaxis outerInstance.new InnerClass()
. Por ejemplo, no hay variables estáticas, no hay inicializadores estáticos para las clases internas. En la discusión de la descarga de clases [1], vemos que el argumento no se aplica realmente a las clases internas, ¡es concebible que las clases internas puedan descargarse! Es concebible que una VM cree una nueva clase interna para cada nueva instancia externa.
Prácticamente ese no es el caso, las clases internas son de hecho tratadas igual que las clases normales. Pero conceptualmente, siempre los pensaré de manera diferente, como clases de instancia privada.
[1] http://java.sun.com/docs/books/jls/third_edition/html/execution.html#12.7
Actualización: según [2]
dos tipos de referencia son del mismo tipo en tiempo de ejecución si ... tienen el mismo nombre del archivo binario
y [3]
El nombre binario de una clase anónima (§15.9.5) consiste en el nombre binario de su tipo que lo rodea inmediatamente, seguido de $, seguido de una secuencia de dígitos no vacía.
Entonces, una clase anónima tiene un nombre binario, por lo tanto, solo un tipo de tiempo de ejecución. La especificación nos garantiza que las diferentes instancias de una clase anónima tienen una clase de identidad.
[2] http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.3.4
[3] http://java.sun.com/docs/books/jls/third_edition/html/binaryComp.html#44909
Gracias, creo que entiendo, pero esto requeriría la creación de varias clases - si he entendido bien. La pregunta tiene un código para una sola clase interna anónima, ¿puede hacer varias instancias de sus objetos? Y no me refiero al uso de un bucle, ya que, de nuevo, eso crearía múltiples clases --- uy, ¿a dónde fue tu comentario? –
Creo que te refieres a varias instancias de su clase? Un objeto es en sí mismo una instancia –
@Hovercraft, no puede poner código legible en los comentarios. ;) –