animal es una superclase de perro y perro tiene un método llamado corteza¿Es posible llamar a los métodos de las subclases en un objeto de superclase?
public void bark()
{
System.out.println("woof");
}
considerar lo siguiente:
Animal a = new Dog();
if (a instanceof Dog){
a.bark();
}
¿Qué pasará?
- la asignación no está permitido
- se permite la llamada a la corteza y "trama" se imprime en tiempo de ejecución
- la llamada a la corteza está permitido, pero no se imprime nada
- la llamada a la corteza provoca un error de tiempo de compilación
- la llamada a los resultados de corteza en un error de tiempo de ejecución
dije 2 como estamos comprobando si el objeto es un perro; como perro es la clase con el método de corte en él, si es así lo llamamos que se imprimirá: s
¿Es correcto mi entendimiento aquí?
sugieren cambiar la pregunta aquí a "hacer superclases tienen los métodos de sus subclases?" o similar. –
El truco es que está comprobando para asegurarse de que es un perro, pero el compilador no establece la conexión lógica de que a.bark solo se llamará si a es un perro. Tendría que decirle explícitamente al compilador que trate a un Perro como para la llamada a ladrar(), como Simon622 dice a continuación. –
Dicho sea de paso, esta es la razón por la que muchas personas prefieren "escribir patos". En, por ejemplo, Python, el código equivalente ni siquiera necesitaría verificar si 'a' era un perro; siempre que 'a' tenga un método' ladrido' cuando se llegue a esa línea, funcionaría. –