Buen día
En el ejercicio anterior llamado ¿cual es la salida? vemos la siguiente ejemplo:
Dada la clase Vehiculo:
public class Vehiculo { public void encender() { System.out.println("Encendiendo vehículo"); } }
La clase Carro:
class Carro extends Vehiculo { public void encender() { System.out.println("Encendiendo Carro"); } }
Y la clase Moto:
class Moto extends Vehiculo { public void encender() { System.out.println("Encendiendo Moto"); } }
Vea el código con el método main:
public class Teste {
public static void main(String[] args) {
Vehiculo m = new Moto();
m.encender();
Vehiculo c = new Carro();
c.encender();
}
}
Cuando se ejecuta, ¿qué se imprimirá en la consola?
esta es la respuesta que se da como correcta
Encendiendo Moto Encendiendo Carro
Correcto. Siempre será llamado el método más específico, primero el método de Moto, después de Carro.
Según lo visto anteriormente por que en este ejemplo de ¿Porque no funciona?
Vea el código a continuación, que debe estar dentro del método main:
Funcionario e = new Gerente(); e.autenticar(1234);
Según lo que aprendió en clase, ¿por qué no se compiló el código?
donde la respuesta correcta es
Porque la referencia e es de tipo Funcionario e la clase Funcionario no tiene el método autenticar.
Correcto. Quien define lo que podemos chamar es la referencia, que es del tipo Funcionario, y es la clase Funcionario el que realmente no tiene ese método.
¿no estaría contradiciendo lo visto en el anterior ejemplo?, por que según el ejemplo anterior el llama es a las funciones mas especificas que en este caso seria la función autenticar antes de mirar funciones de la clase referencia.