Clases e interfaces internas static

Se conocen también con el nombre de clases anidadas (nested classes). Las clases e interfaces internas static sólo pueden ser creadas dentro de otra clase al máximo nivel, es decir directamente en el bloque de definición de la clase contenedora y no en un bloque más interno.

Es posible definir clases e interfaces internas static dentro de una interface contenedora. Este tipo de clases internas se definen utilizando la palabra static. Todas las interfaces internas son implícitamente static.

En cierta forma, las clases internas static se comportan como clases normales en un package. Para utilizar su nombre desde fuera de la clase contenedora hay que precederlo por el nombre de la clase contenedora y el operador punto (.)

Este tipo de relación entre clases se puede utilizar para agrupar varias clases dentro de una clase más general. Lo mismo puede decirse de las interfaces internas.

Las clases internas static pueden ver y utilizar los miembros static de la clase contenedora. No se necesitan objetos de la clase contenedora para crear objetos de la clase interna static. Los métodos de la clase interna static no pueden acceder directamente a los objetos de la clase contenedora, caso de que los haya: deben disponer de una referencia a dichos objetos, como cualquier otra clase.

La sentencia import puede utilizarse para importar una clase interna static, en la misma forma que si se tratara de importar una clase de un package (con el punto (.)). Por ejemplo, si la interface Linkable es interna a la clase List, para implementar dicha interface hay que escribir,

… implements List.Linkable

y para importarla hay que usar,

import List.*; // o bien import List.Linkable;

Fuente: Aprenda Java como si estuviera en primero de la Universidad de Navarra