2017-04-22 2 views
-4

Je me suis cogné la tête pour comprendre l'utilisation réelle de la coulée de type objet dans Java et pourquoi il est encore là. Voir l'exemple ci-dessous.Quel est le point de la coulée de type Object Implicit?

Ma question est sous la forme de commentaires ci-dessous.

Veuillez ne pas me suggérer d'aller chercher quelque part. J ai déjà fait ça. S'il vous plaît répondez-moi directement si vous le savez. Merci.

Vérifiez ce code avec la méthode 'scream' substituée Je ne reçois pas d'erreur de compilation. Regardez les commentaires trop

Animal aniObj = new Animal(); 
    Animal dogAniObj = new Dog(); 
    Dog dogObj = new Dog(); 

    ArrayList<Animal> animalArrayList = new ArrayList<Animal>(); 

    animalArrayList.add(aniObj); 
    animalArrayList.add(dogAniObj); 
    animalArrayList.add(dogObj);//Here when I am able to add the Dog object there no point in creating dogAniObj above 

    aniObj.scream();//Calls scream of Animal 
    dogAniObj.scream();//Calls scream of Dog 
    dogObj.scream();//Calls scream of Dog. Then why do i need above statement? Why to attain polymorphic behavior when we can directly call scream method with the Dog object when needed? 
+0

Bienvenue sur SO. Quelle est ta question ? – c0der

+1

En relation: http://stackoverflow.com/questions/383947/what-does-it-mean-to-program-to-an-interface –

+0

Où vous attendez-vous une erreur de compilation? – Bubletan

Répondre

0

C'est ce que Java Runtime vous donne comme Polymorphisme, lors de l'exécution ce qui est l'objet de référence, il a, cette instance de méthode est appelée.

pense que vous écrivez une lib/cadre générique tout ce que vous voulez utiliser est Animal classe qui est la base de toutes les autres sous-classes comme Dog, Cat etc, alors vous ne pouvez pas déclarer vos membres comme Dog myDog or Cat myCat là, il devrait être Animal myAnimal pour qu'il peut prendre toutes les sous-classes animales.

C'est pourquoi animalArrayList devrait toujours prendre Animal et ses variantes aucune erreur de compilation vient.

Vous ne savez jamais Animal classe peut être étendue par vos utilisateurs lib pour créer de nombreuses autres classes d'animaux.