Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

DUDA CLASE 3 EJERCICIO 5: "¿CUAL ES LA SALIDA?

En el ejercicio 5 de la clase 3 se plantea la pregunta de cual es la salida del siguiente codigo:

public class Vehiculo {
    public void encender() {
        System.out.println("Encendiendo vehículo");
    }
}
class Carro extends Vehiculo {
    public void encender() {
        System.out.println("Encendiendo Carro");
    }
}
class Moto extends Vehiculo {
    public void encender() {
        System.out.println("Encendiendo Moto");
    }
}

public class Teste {

    public static void main(String[] args) {

        Vehiculo m = new Moto();
        m.encender();

        Vehiculo c = new Carro();
        c.encender();
    }

}

La salida es "encendiendo moto" y "encendiendo carro". Al elegir la respuesta correcta aparece una explicacion: "Correcto. Siempre será llamado el método más específico, primero el método de Moto, después de Carro". Mi pregunta es la siguiente: ¿puede ser que otra de las razones por la cual esa es la solucion correcta es que lo que se produce es la sobreescritura del metodo - public void encender() - de la clase padre en cada una de las clases hijas?

Gracias! Saludos!

1 respuesta

Hola soy Luis Velasquez y me permito aportar lo siguiente:

En el ejemplo definimos una super-clase Vehiculo la cual tiene un método encender.

Las sub-clases Moto y Carro extienden la super-clase Vehículo y también tienen definido el método encender.

Ahora bien, en el programa principal en la clase Teste se definen dos variables de la superclase al definir Vehiculo m y Vehiculo c. Estamos definiendo dos variables del tipo de la superclase e instanciamos dos objetos de las sub-clases Moto y Carro respectivamente.

Al invocar los métodos con las variables de la superclase (m.encender y c.encender) se llaman los métodos de las sub-clases (Moto y Carro) y no los métodos de la superclase correspondiente a las variables.

Esto funciona así por el mecanismo del polimorfismo.

Dice la teoría: cuando una variable del tipo de la super-clase contiene una referencia a un objeto de una sub-clase, y se usa la referencia para llamar un método, entonces se invoca el método de la sub-clase.

Recordar que un objeto de una sub-clase es también un objeto de la super-clase

Espero aportar algo a la explicación del tema en cuestión.