Polymorphisme Java

Ceci est une question juste par curiosité.

Je sais que lorsque nous appelons la méthode surchargée d’un object de sous-classe par la référence de sa superclasse, JVM accorde de l’importance au type d’object et non au type de référence.

Ceci est mon code simple:

class Animal { void eat() { System.out.println("Animal is eating..."); } } class Horse extends Animal { @Override void eat() { System.out.println("Horse is eating..."); } } public class PolymorphismTest { public static void main(Ssortingng...args) { Animal a=new Animal(); a.eat(); Animal h= new Horse(); h.eat(); } } 

Comme prévu, je reçois le résultat:

 run: Animal is eating... Horse is eating... BUILD SUCCESSFUL (total time: 0 seconds) 

Ma question est la suivante: pouvons-nous utiliser la référence h pour appeler la méthode super-classe eat () et non la sous-classe? Je sais que cette question est un peu contraire aux lois du polymorphism, mais on ne sait jamais quand il sera nécessaire de le faire.

J’ai essayé de dactylographier la référence h à Animal mais pas de chance. Des idées?

 class Horse extends Animal { @Override void eat() { super.eat(); } } 

Non, vous devrez le faire explicitement dans la méthode super.eat() c’est-à-dire super.eat() ).

Vous ne pouvez pas le faire en effectuant une conversion de type. Votre seule façon d’appeler la méthode de la super-classe est de l’envelopper comme l’a montré Brett Holt ou vous devez avoir un object dont le type d’exécution le plus spécifique est Animal.

En Java – Toutes les méthodes sont virtuelles et leur implémentation la plus récente est utilisée lors de l’appel de la fonction.

Pour répondre à votre question, veuillez rendre la méthode static dans la classe Animal, puis vous obtiendrez la méthode eat de la classe Animal appelée.

 static void eat(){ System.out.println("Animal is eating..."); }