Clases internas de Java
En este capítulo aprenderemos las clases internas de Java.
En Java, una clase puede anidar a otra clase, el formato de sintaxis es el siguiente:
class OuterClass { // 外部类
// ...
class NestedClass { // 嵌套类,或称为内部类
// ...
}
}
Para acceder a la clase interna, se puede crear un objeto de la clase externa y luego un objeto de la clase interna.
Hay dos tipos de clases anidadas:
- Clase interna no estática
- Clase interna estática
Clase interna no estática
Una clase interna no estática es una clase que está anidada dentro de otra clase. Tiene permiso para acceder a los miembros de la clase externa y generalmente se le llama clase interna.
Dado que la clase interna está anidada en la clase externa, primero se debe instanciar la clase externa y luego crear el objeto de la clase interna.
Ejemplo
int x = 10;
class InnerClass {
int y = 5;
}
}
public class MyMainClass {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.y + myOuter.x);
}
}
El resultado de ejecutar el ejemplo anterior es:
15
Clase interna privada
La clase interna puede modificarse con private o protected. Si no desea que la clase interna sea accesible desde fuera de la clase externa, puede usar el modificador private:
Ejemplo
int x = 10;
private class InnerClass {
int y = 5;
}
}
public class MyMainClass {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.y + myOuter.x);
}
}
En el ejemplo anterior, InnerClass se establece como clase interna privada, y la ejecución generará un error:
MyMainClass.java:12: error: OuterClass.InnerClass has private access in OuterClass
OuterClass.InnerClass myInner = myOuter.new InnerClass();
^
Clase interna estática
La clase interna estática se puede definir con la palabra clave static. Para acceder a una clase interna estática no necesitamos crear una instancia de la clase externa, podemos acceder a ella directamente:
Ejemplo
int x = 10;
static class InnerClass {
int y = 5;
}
}
public class MyMainClass {
public static void main(String[] args) {
OuterClass.InnerClass myInner = new OuterClass.InnerClass();
System.out.println(myInner.y);
}
}
El resultado de ejecutar el ejemplo anterior es:
5
Nota:La clase interna estática no puede acceder a los miembros de la clase externa.
Acceso a miembros de la clase externa desde la clase interna
Un uso avanzado de la clase interna es que puede acceder a los atributos y métodos de la clase externa:
Ejemplo
int x = 10;
class InnerClass {
public int myInnerMethod() {
return x;
}
}
}
public class MyMainClass {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.myInnerMethod());
}
}
El resultado de ejecutar el ejemplo anterior es:
10Otras extensiones
Objetos y clases de Java