Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Raquel en 12 de Agosto 2021, 01:30

Título: Java pregunta de test se muestra código y se pide indicar cuál es el resultado
Publicado por: Raquel 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();
    }
}
Título: Re: Buenas tardes me podrían ayudar con este código
Publicado por: Kabuto 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();
    }
}