Clases dentro de otras (Jerarquizadas)
Java permite definir clases dentro de otras. A esto se le denomina clases jerarquizadas (Nested classes).
class OuterClass { //clase externa
...
static class NestedClass {
...
}
class ClaseInterna {
...
}
}
Las clases jerarquizadas no estáticas son llamadas clases internas (inner classes). Las estáticas son llamadas static nested classes.
class OuterClass {
...
static class StaticNestedClass {
...
}
class InnerClass {
...
}
}
- Una clase Nested (estática o no) es miembro de su clase contenedora.
- Una clase Nested no estática (
inner class) tiene acceso a todos los datos y funciones de la clase contenedora (enclosing class). Inclusive si estas son declaradas comoprivate. - Una clase Nested estática no puede acceder a los campos y funciones de su clase contenedora.
- Una clase nested puede ser
private , public , protected.
¿Porqué usar Nested Classes?
- Agrupa clases que son utilizadas en un solo lugar (formularios, etc...)
- Incrementa la encapsulación.
Clases Nested Estáticas
Al igual que los métodos estáticos, en estas clases solo podemos ver las variables y métodos estáticos.
OuterClass.StaticNestedClass //para llamar a una clase nested estática
Clases Nested No Estáticas (Inner Classes)
De igual manera, las clases internas actúan como un campo o método de instancia, y pueden acceder tanto a métodos y campos de instancia como de clase. Se las suele utilizar como clases helper, es decir, clases que realizan tareas específicas, que ayudan a otras clases para hacer más legible / entendible el código.
ClaseExterna.ClaseInterna interna = ClaseExterna.new ClaseInterna();