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();