Tutoriales de Java

Java INICIO Introducción a Java Introducción a Java Sintaxis Java Comentarios Java Variables Java Tipos de datos Java Conversión de tipos de Java Operadores Java Cadenas Java Matemáticas Java Booleanos de Java Java si... si no Conmutador de Java Ciclo while de Java Java para bucle Java Pausa/Continuar Matrices de Java

Métodos de Java

Métodos de Java Parámetros del método Java Sobrecarga del método Java Alcance de Java Recursión de Java

Clases Java

programación orientada a objetos de Java Clases/Objetos Java Atributos de clase de Java Métodos de clase Java Constructores Java Modificadores de Java Encapsulación de Java Paquetes Java/API Herencia de Java Polimorfismo de Java Clases internas de Java Abstracción de Java Interfaz Java Enumeraciones de Java Entrada de usuario de Java Fecha Java Java ArrayList Java LinkedList Mapa hash de Java HashSet de Java Iterador de Java Clases contenedoras de Java Excepciones de Java Java expresión regular Subprocesos de Java Java lambda

Manejo de archivos Java

Archivos Java Java crear/escribir archivos Archivos de lectura de Java Eliminar archivos de Java

Java Cómo

Añadir dos números

Referencia Java

Palabras clave de Java Métodos de cadena de Java Métodos matemáticos de Java

Ejemplos de Java

Ejemplos de Java Compilador Java Ejercicios Java Cuestionario Java Certificado Java


Clases internas de Java


Clases internas de Java

En Java, también es posible anidar clases (una clase dentro de una clase). El propósito de las clases anidadas es agrupar clases que pertenecen juntas, lo que hace que su código sea más legible y fácil de mantener.

Para acceder a la clase interna, cree un objeto de la clase externa y luego cree un objeto de la clase interna:

Ejemplo

class OuterClass {
  int x = 10;

  class InnerClass {
    int y = 5;
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.y + myOuter.x);
  }
}

// Outputs 15 (5 + 10)


Clase interna privada

A diferencia de una clase "regular", una clase interna puede ser privateo protected. Si no desea que los objetos externos accedan a la clase interna, declare la clase como private:

Ejemplo

class OuterClass {
  int x = 10;

  private class InnerClass {
    int y = 5;
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.y + myOuter.x);
  }
}

Si intenta acceder a una clase interna privada desde una clase externa, se produce un error:

Main.java:13: error: OuterClass.InnerClass has private access in OuterClass
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
              ^



Clase interna estática

Una clase interna también puede ser static, lo que significa que puede acceder a ella sin crear un objeto de la clase externa:

Ejemplo

class OuterClass {
  int x = 10;

  static class InnerClass {
    int y = 5;
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass.InnerClass myInner = new OuterClass.InnerClass();
    System.out.println(myInner.y);
  }
}

// Outputs 5

Nota: al igual que staticlos atributos y los métodos, una staticclase interna no tiene acceso a los miembros de la clase externa.


Acceder a la clase exterior desde la clase interior

Una ventaja de las clases internas es que pueden acceder a atributos y métodos de la clase externa:

Ejemplo

class OuterClass {
  int x = 10;

  class InnerClass {
    public int myInnerMethod() {
      return x;
    }
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.myInnerMethod());
  }
}

// Outputs 10