Pregunta Java: clases internas anidadas

2 min de lectura

Piensa la respuesta antes de abrirla. Todas las opciones parecen razonables, y casi siempre hay un detalle que lo cambia todo.

Pregunta Java · Clases internas

¿Cuál es el resultado de compilar y ejecutar la clase Prueba1?

public class Prueba1 {
    public class Prueba2 {
        public class Prueba3 {
            public Prueba3(){
                System.out.println("Hola");
            }
            public class Prueba4 {
                public void Prueba4(){
                    System.out.println("Mundo");
                }
            }
        }
    }

    public static void main(String args []){
        Prueba2.Prueba3.Prueba4 p = new Prueba1().new Prueba2().new Prueba3().new Prueba4();
    }
}
  1. No compila por la declaración de las clases Prueba2, Prueba3 y Prueba4 dentro de Prueba1.
  2. No compila porque la declaración de la variable p es incorrecta.
  3. Compila y no imprime nada.
  4. Imprime "Hola Mundo"
  5. Imprime "Hola"
Ver la respuesta

Respuesta: e.

java Prueba1Hola

Las clases internas se pueden anidar sin límite, y para crear una hace falta una instancia de la que la contiene. Eso es justo lo que hace la cadena new Prueba1().new Prueba2().new Prueba3().new Prueba4(), y el tipo Prueba2.Prueba3.Prueba4 es correcto.

La trampa está en public void Prueba4(): por llevar void, no es un constructor, sino un método que se llama igual que la clase. Al hacer new Prueba4() se usa el constructor por defecto, que no imprime nada. El único constructor que escribe algo es el de Prueba3, y por eso solo sale Hola.

Pregunta publicada en 2014 y revisada en octubre de 2026. La respuesta se comprobó compilando y ejecutando el código con Java 25 LTS en un contenedor limpio; las salidas están copiadas de esa ejecución.

15 comentarios en «Pregunta Java: clases internas anidadas»

  1. Perdón la ignorancia, no manejo java pero…
    Prueba2.Prueba3.Prueba4 p = …

    es correcto?…. qué significa la p? (si se puede explicar fácilmente en no más de una línea, si me tengo que leer el manual ni se gasten)

    Responder

Deja un comentario