1
respuesta

Por que se contradice el ejemplo anterior de ¿cual es la salida? con el ejemplo de ¿Porque no funciona?

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.

1 respuesta

¡Hola Carlos!

En el primer ejemplo que mencionas, se llama al método más específico de la clase hija, es decir, se llama al método "encender" de la clase "Moto" y al método "encender" de la clase "Carro", ya que son las clases hijas de la clase "Vehiculo" y sobrescriben el método "encender" de la clase padre.

En el segundo ejemplo, se intenta llamar al método "autenticar" de la clase "Gerente" a través de una referencia de tipo "Funcionario". La clase "Funcionario" no tiene el método "autenticar", por lo que se produce un error de compilación.

En resumen, en ambos casos se llama al método más específico de la clase hija, pero en el segundo ejemplo, la referencia utilizada no tiene acceso a ese método específico, lo que produce un error de compilación.

Espero haber aclarado tu duda. ¡Buenos estudios!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios