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();
}
}- No compila por la declaración de las clases Prueba2, Prueba3 y Prueba4 dentro de Prueba1.
- No compila porque la declaración de la variable
pes incorrecta. - Compila y no imprime nada.
- Imprime
"Hola Mundo" - 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.
Más preguntas de Java
- El orden de un HashSet
- wait() sin el monitor correcto
- start() con un argumento
- Dos hilos y una variable compartida
- wait() fuera de synchronized
- Leer más allá del final de un archivo
- binarySearch con null
- Serializar una clase cuyo padre no es Serializable
- Llamar a run() en vez de start()
- Un assert que nunca falla
- HashSet sin equals ni hashCode
- Campos transient al serializar
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.
respuesta la (e)
Respuesta "e"
E
E) Por que la clase Prueba4 solo contiene el método Prueba4 (no es el constructor) y el constructor por default.
b
no existe la clase "Prueba"
B
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)
p es una variable instanciada
(c)
public prueba3(){
Es incorrecto porque no tiene tipo de fincion
public void prueba3(){
asi funcionaria sin error creo
aunque no es probado la anidacion de class nunca
es el constructor de la clase
a) Si las clases se definen publicas tienen que ser declaradas en un archivo diferente
Imprime "Hola Mundo". ya que estoy accediendo a los constructores de las clases anidadas prueba3 y prueba4.
De salida, la unica clase que puede tener public es la inicial (la que le da nombre al archivo), las demás no pueden contener la palabra reservada public. jejejeje cierto¿ Saludos!
Segun yo, tienes razón…