Autor Tema: Buenas tardes me podrían ayudar con este código  (Leído 165 veces)

Raquel

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 8
    • Ver Perfil
Buenas tardes me podrían ayudar con este código
« en: 12 de Agosto 2021, 01:30 »
Dado el siguiente código. Cuál es el resultado?
public class Clase {
    public Clase() {
        System.out.print("a ");
    }
}

public class Clase2  extends Clase {
    public Clase2() {
        System.out.print("b ");
    }
}

public class Clase3 extends Clase2 {
    public Clase3() {
        System.out.print("c ");
    }
}

public class Test {     
    public static void main(String args[]) {
        new Clase3();
    }
}

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 702
    • Ver Perfil
Re: Buenas tardes me podrían ayudar con este código
« Respuesta #1 en: 12 de Agosto 2021, 12:52 »
El resultado en pantalla sería:
Citar
a b c

¿Por qué?

El método main hace una instancia de la Clase3

Código: [Seleccionar]
    public static void main(String args[]) {
        new Clase3();
    }
Esta clase, en su constructor imprime una "c " en pantalla.
Pero como hereda de Clase2, antes de ejecutar el código de su constructor, ejecuta el constructor de su madre Clase2, que imprime una "b " en pantalla.

Pero resulta que Clase2, hereda de Clase, así que antes de ejecutar su constructor, ejecuta el del Clase, que imprime una "a " en pantalla.

La conclusión es que una clase que hereda de otra, cuando se hace una instancia de ella, lo primero que hace es "construir" a su clase madre, quien si a su vez también hereda de otra clase, construirá primero a esta.

Entonces, al construir un objeto Clase3, previamente se hace la construcción de Clase2, quién previamente construye Clase.

Así Clase3, es el resultado de los constructores que hayan en la línea de herencia.


Se podría comprobar con este código:

Código: [Seleccionar]
public class Main
{
    public static class Clase {
        public Clase() {
            System.out.print("a ");
        }
    }

    public static class Clase2  extends Clase {
        public Clase2() {
            System.out.print("b ");
        }
    }

    public static class Clase3 extends Clase2 {
        public Clase3() {
            System.out.print("c ");
        }
    }

    public static void main(String args[]) {
        new Clase3();
    }
}
« Última modificación: 12 de Agosto 2021, 12:54 por Kabuto »
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".