Hola
Me parece que Hector se refiere a la clase 3 "Entendiendo Polimorfismo / Introducción a Polimorfismo" https://app.aluracursos.com/course/java-parte-3-entendiendo-herencia-interfaces/task/73464
En esa clase el instructor hace algo similar al ejercicio del Vehículo, Carro y Moto, sin embargo no funciona igual.
Para resumir esa clase:
class Gerente extends Funcionario
Asimismo en la clase Gerente se tiene:
public boolean iniciarSesion (String clave) {
return clave == "AluraCursosOnline";
}
//este método no está en la clase Funcionario, está únicamente en la clase Gerente
Luego se crea un objeto de la siguiente manera y se intenta llamar al método iniciarSesion()
Funcionario funcionario = new Gerente ();
funcionario.iniciarSesion()
//aún faltó ingresar el argumento pero hasta ese momento el IDE ya mostraba el siguiente error: "This method iniciarSesion() is undefined for the type Funcionario"
El instructor no pudo ejecutar el método iniciarSesion() de esta manera, porque ese método no existe en la clase Funcionario, a pesar que existe en la clase Gerente, y por lo tanto no puede acceder a él al ser un método propio de Gerente. Por eso ese caso parece contradictorio con el ejercicio del Vehiculo, Carro, Moto; ya que en ambos casos se creó el objeto de la misma manera y se hizo el llamado al método de la clase hija, pero en un caso el llamado fue exitoso y en el otro no.
Lo que hice entonces fue copiar el código del ejercicio del Vehículo, Carro y Moto en el IDE, y luego comenté el método encender() de la clase Vehículo, para asemejarlo a la situación que mostró el instructor durante la clase y entonces ya no compilaba el código y aparecía el mismo error que le apareció al instructor: "This method encender() is undefined for the type Vehiculo"
Con esto y además modificando el código que el instructor mostró durante la clase (para asemejarlo al ejercicio del Vehiculo), me di cuenta que en primer lugar debe existir el método en la clase padre para que al hacer el llamado se tenga acceso a ese método y a su vez el mismo método debe estar sobreescrito en las clases hijas y es entonces que el método llamado será de la clase más especifica que lo implemente (ya se puede hacer esta comparación al ya existir el método en la clase padre y estar sobreescrito en la hija), por eso que en este ejercicio la salida es:
Encendiendo Moto
Encendiendo Carro
Escribí esto con la intención de contribuir porque esto también me generó dudas por la aparente contradicción que hubo entre la clase del instructor y el ejercicio del Vehiculo, pero si hay algo inexacto en este razonamiento por favor háganme saber.
Gracias.