Pourquoi utiliser le Polymorphisme?
J'ai le code suivant dans lequel j'ai une classe parent et son enfant. Je suis en train de déterminer comment le code avantages de l'utilisation du polymorphisme.
class FlyingMachines {
public void fly() {
System.out.println("No implementation");
}
}
class Jet extends FlyingMachines {
public void fly() {
System.out.println("Start, Taxi, Fly");
}
public void bombardment() {
System.out.println("Throw Missile");
}
}
public class PolymorphicTest {
public static void main(String[] args) {
FlyingMachines flm = new Jet();
flm.fly();
Jet j = new Jet();
j.bombardment();
j.fly();
}
}
Quel est l'avantage de polymorphisme lorsque les deux flm.fly()
et j.fly()
de me donner la même réponse?
- Je pense qu'il veut savoir quelle Est la Différence Entre le flm.voler() et j.voler()? Si oui? que Quoi?
- Exactement. Merci @Shaharyar
Vous devez vous connecter pour publier un commentaire.
regardons OO design tout d'abord, l'héritage représente une relation " EST-UN, généralement on peut dire quelque chose comme "laissez nos
FlyingMachines
à la mouche". chaqueFlyingMachines
(sous-classe)-UNFlyingMachines
(classe mère), disonsJet
, il correspond à cette "laissez nosFlyingMachines
mouche", alors que nous voulons que ce vol en fait être la volée en fonction de la spécificité de (sous-classe), c'est le polymorphisme de prendre le dessus.si nous faisons les choses de manière abstraite, des interfaces orientées et de la classe de base, ne sont pas réellement dépendent de détail de mise en œuvre, le polymorphisme va faire la bonne chose!
Dans votre exemple, l'utilisation du polymorphisme n'est pas incroyablement utile, car vous n'avez qu'une sous-classe de
FlyingMachine
. Polymorphisme devient utile si vous avez plusieurs sortes deFlyingMachine
. Ensuite, vous pourriez avoir une méthode qui accepte tout type deFlyingMachine
et utilise sesfly()
méthode. Un exemple pourrait êtretestMaxAltitude(FlyingMachine)
.Une autre fonctionnalité est disponible uniquement avec le polymorphisme est la capacité d'avoir un
List<FlyingMachine>
et l'utiliser pour stockerJet
,Kite
, ouVerySmallPebbles
.L'un des meilleurs des cas on peut faire pour l'utilisation du polymorphisme est la capacité de se référer à des interfaces plutôt que des implémentations.
Par exemple, il est préférable d'avoir une méthode qui retourne comme
List<FlyingMachine>
plutôt qu'unArrayList<FlyingMachine>
. De cette façon, je peux changer ma mise en œuvre au sein de la méthode à unLinkedList
ou unStack
sans casser le code qui utilise ma méthode.List<FlyingMachine>
plutôt qu'unList<Jet>
.La raison pour laquelle vous utiliser le polymorphisme, c'est quand vous construisez des cadres généraux qui prennent tout un tas d'objets différents avec la même interface. Lorsque vous créez un nouveau type d'objet, vous n'avez pas besoin de changer de cadre pour accueillir le nouveau type d'objet, tant qu'il suit les "règles" de l'objet.
Donc dans votre cas, un exemple plus utile est la création d'un objet de type "Aéroport" qui accepte différents types de FlyingMachines. L'Aéroport de définir un "AllowPlaneToLand", une fonction similaire à:
Aussi longtemps que chaque type de FlyingMachine définit un bon LandPlane méthode, il peut se poser lui-même correctement. L'Aéroport n'a pas besoin de savoir quelque chose au sujet de la FlyingMachine, sauf qu'à poser l'avion, il doit invoquer LandPlane sur le FlyingMachine. Si l'Aéroport n'a plus besoin de changer, et peut continuer à accepter de nouveaux types de FlyingMachines, que ce soit un handglider, un OVNI, un parachute, etc.
Donc le polymorphisme est utile pour les cadres qui sont construits autour de ces objets, qui peuvent, de manière générique, l'accès à ces méthodes sans avoir à changer.
L'avantage est que
retourne
au lieu de
C'est le polymorphisme. Vous appelez
fly()
sur un objet de typeFlyingMachine
et il ne sait toujours qu'il est en fait unJet
et les appels appropriésfly()
plutôt la méthode de la fausse sorties qui"No implementation"
.Qui signifie que vous pouvez écrire des méthodes qui fonctionnent avec des objets de type
FlyingMachine
et de le nourrir avec toutes sortes de sous-types commeJet
ouHelicopter
et ceux des méthodes de toujours faire la bonne chose, c'est à dire l'appel de lafly()
méthode du type approprié au lieu de faire toujours la même chose, c'est à dire la sortie"No implementation".
Polymorphisme
Polymorphisme n'est pas utile dans votre exemple.
a) Il devient utile lorsque vous avez différents types d'objets et peut écrire des classes qui peuvent travailler avec tous les différents types parce qu'ils adhèrent à la même API.
b) Il est également utile lorsque vous pouvez ajouter de nouveaux
FlyingMachine
s à votre application sans modification de la logique existante.a) et b) sont les deux faces d'une même pièce.
Laissez-moi vous montrer comment.
Exemple de Code
Explication
a) La
MakeThingsFly
de la classe peut travailler avec tout ce qui est du typeFlyingMachine
.b) La méthode
letTheMachinesFly
fonctionne aussi sans tout changer (!) lorsque vous ajoutez une nouvelle classe, par exemplePropellerPlane
:C'est le pouvoir de polymorphisme. Vous pouvez mettre en œuvre la ouvert-fermé-principe avec elle.
Il n'ajoute pas beaucoup si vous allez viens Jets, l'avantage va venir quand vous avez différentes FlyingMachines, par exemple, de l'Avion
Maintenant que vous avez modifié pour inclure plus de classes, l'avantage de polymorphisme est que l'abstraction de ce que le type (et le concept des affaires) de l'instance que vous recevez, que vous venez de soins qu'il peut voler
Les deux
flm.fly()
etj.fly()
vous donner la même réponse en raison de la nature de l'instance est en fait le même, qui estJet
, de sorte qu'ils sont se comportent de la même.Vous pouvez voir la différence quand vous:
Polymorphisme est définie comme la même signature de la méthode avec la différence de comportement. Comme vous pouvez le voir, les deux
FlyingMachines
etJet
avons méthodefly()
défini, mais la méthode est implémentée différemment, qui les considèrent comme de se comporter différemment.Voir
aa
Le polymorphisme (à la fois de l'exécution et de la compilation) est nécessaire en Java pour quelques raisons.
La redéfinition de méthode est un moment de l'exécution polymorphisme et la surcharge est moment de la compilation polymorphisme.
Quelques-uns d'entre eux sont(certains d'entre eux sont déjà discuté):
Collections: Supposons que vous avez plusieurs type de machines volantes et que vous voulez les avoir tous dans une seule collection. Il vous suffit de définir une liste de type
FlyingMachines
et ajoutez tous.Ci-dessus peut être fait que par le polymorphisme. Sinon, vous devez avoir à maintenir deux listes distinctes.
Caste un type à l'autre : Déclarer les objets tels que :
Surcharge: Pas liées avec le code que vous avez donné, Mais la surcharge est aussi un autre type de polymorphisme appelé moment de la compilation polymorphisme.
Peut avoir qu'une seule méthode qui accepte de type
FlyingMachine
gérer tous les types c'est à dire des sous-classes de FlyingMachine. Ne peut être réalisé avecPolymorphism
.Polymorphisme peut aussi aider notre code pour supprimer le "si" conditionnel qui vise à produire le niveau de production de code parce que la suppression des conditions feront augmenter la lisibilité du code et nous aide à mieux écrire unité des cas de test, nous savons pour le "n" si des cas, il vient n!(factorielle n) possibilités.
Nous allons voir comment
si vous avez de la classe FlyingMachine et qui prend une chaîne de caractères dans le constructeur de définir le type de FlyMachine comme ci-dessous
Nous pouvons créer deux instances de FlyingMachine comme
et d'obtenir les vitesses à l'aide de
Mais si vous utiliser le polymorphisme vous allez supprimer les si les conditions en étendant le générique FlyMachine classe et en remplaçant la getFlyingSpeedInMph comme ci-dessous
Maintenant vous pouvez obtenir les vitesses de vol en tant que ci-dessous
La bonne raison pour laquelle le Polymorphisme est besoin d'en java est parce que le concept est largement utilisé dans la mise en œuvre de l'héritage.Il joue un rôle important en permettant à des objets ayant des structures internes de partager la même interface externe.
polymorphisme comme l'indique clairement par lui-même, celui qui mappés pour beaucoup.
java est un oops de la langue afin qu'elle ont de la mise en œuvre en résumé, la surcharge et dominante
souvenir de java n'aurait pas de spécification pour le moment de l'exécution du polymorphisme.
il a quelques meilleur exemple pour elle aussi.
Primordial
redéfinir le comportement de la classe de base.
par exemple je veux ajouter un nombre de vitesse int les fonctionnalités existantes de se déplacer dans ma base de Voiture.
Surcharge
peut avoir un comportement du même nom avec une signature différente.
par exemple, un particulier le président parle clairement un fort, mais l'autre ne parle que de la voix.
Polymorphisme vous donne des avantages que si vous avez besoin de Polymorphisme.
Il est utilisé lorsqu'une entité de votre projet conceptuel peut être considérée comme la spécialisation d'une autre entité.
L'idée principale est de "spécialisation".
Un excellent exemple des peuplements dits de la Taxonomie,par exemple appliqué à des êtres vivants.
Les chiens et les Humains sont à la fois les Mammifères.
Cela signifie que, à la classe des Mammifères groupe de toutes les entités qui ont des propriétés et des comportements communs.
Aussi, un ElectricCar et un DieselCar sont une spécialisation d'une Voiture.
Donc, les deux ont un isThereFuel() parce que quand vous conduisez une voiture, vous vous attendez à savoir si il ya assez de carburant pour le moteur.
Un autre grand concept est "l'attente".
C'est toujours une bonne idée de dessiner un ER (entité-relation) diagramme de domaine de votre logiciel avant de le démarrer.
C'est parce que vous êtes forcé à l'image, le type d'entités sont va être créé et, si vous en êtes capable, vous pouvez également enregistrer beaucoup de code à trouver des comportements communs entre les entités.
Mais l'enregistrement de code n'est pas le seul avantage d'un bon projet.
Vous pourriez être intéressé à trouver les soi-disant "génie logiciel", que c'est un ensemble de techniques et de concepts qui permet d'écrire "code propre" (il y a aussi un grand livre intitulé "code Propre" qui est largement suggéré par les programmes).
Nous allons ajouter une classe plus dans le présent, Il vous aident à comprendre l'utilisation du polymorphisme..
De sortie:
Ici, pour ce code, il n'est pas nécessaire de polymorphisme.
Nous allons comprendre pourquoi et quand nous avons besoin de polymorphisme.
Supposons qu'il existe différents types de machines (voiture, scooter, machine à laver, un moteur électrique, etc.) et nous savons que chaque machine démarre et s'arrête. Mais la logique de démarrer et d'arrêter une machine est différent pour chaque machine. Ici, chaque machine aura différentes implémentations pour démarrer et arrêter. Donc, à fournir des implémentations différentes nous avons besoin de polymorphisme.
Ici, nous pouvons avoir une classe de base de la machine avec
start()
etstop()
comme ses méthodes et chaque type de machine peut étendre cette fonctionnalité et@Override
ces méthodes.