Maison >Java >javaDidacticiel >Qu'est-ce que le polymorphisme Java ?
Ce que cet article vous apporte, c'est qu'est-ce que le polymorphisme Java ? L'utilisation du polymorphisme Java, à travers certaines fonctions du jeu, vous aidera à maîtriser l'utilisation du polymorphisme. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.
Dans un jeu de combat (toutes similitudes sont purement fortuites), il y a deux héros mages différents : Xiao Qiao et Daji.
Les deux héros mages ont des méthodes d'attaque. Les dégâts d'attaque de Xiao Qiao sont de 10 et consomment 20 manas. Les dégâts d'attaque de Daji sont de 15 et consomme 30 manas. Les joueurs peuvent utiliser deux héros pour attaquer. Jetons un coup d’œil au code implémenté.
Classe Père - Héros : whyusepolymorphic.Hero.java
package whyusepolymorphic; public class Hero { private int magicPoint;//魔法值 private int hurt;//伤害 private String name;//姓名 public Hero(int magicPoint, int hurt, String name) { super(); this.magicPoint = magicPoint; this.hurt = hurt; this.name = name; } public int getMagicPoint() { return magicPoint; } public void setMagicPoint(int magicPoint) { this.magicPoint = magicPoint; } //省略属性的 getter 和 setter 方法 }
Sous-classe - Xiao Qiao : whyusepolymorphic.LittleJoe.java
package whyusepolymorphic; public class LittleJoe extends Hero { public LittleJoe(int magicPoint, int hurt, String name) { super(magicPoint, hurt, name); } //攻击的方法 public void attack() { System.out.println(this.getName()+" 发动攻击,伤害为:"+this.getHurt() +"。消耗 20的魔法值"); this.setMagicPoint(getMagicPoint()-20);//魔法值-20 } }
Sous-classe - Daji : whyusepolymorphic.Daji.java
package whyusepolymorphic; public class Daji extends Hero{ public Daji(int magicPoint, int hurt, String name) { super(magicPoint, hurt, name); } public void attack() { System.out.println(this.getName()+" 发动攻击,伤害为:"+this.getHurt() +"。消耗 30的魔法值"); this.setMagicPoint(getMagicPoint()-30);//魔法值-30 } }
Joueur : whyusepolymorphic.Player.java
package whyusepolymorphic; public class Player { public void play(LittleJoe littleJoe) { littleJoe.attack(); } public void play(Daji daji) { daji.attack(); } }
Le code ci-dessus implémente complètement les fonctions requises, alors nous savons que les héros ne peuvent pas être seulement ces quelques-uns, si une nouvelle magie est ajoutée plus tard. Héros , les dégâts sont différents, que dois-je faire ?
Nous pouvons ajouter de nouvelles classes pour implémenter des méthodes d'attaque et modifier la classe du joueur pour ajouter des méthodes pour faire fonctionner les héros. Cette méthode peut répondre aux besoins d'expansion des héros, mais si d'autres héros sont ajoutés plus tard, elle ne nous sera pas si pratique à maintenir.
En étudiant le code ci-dessus, nous avons constaté que les paramètres de la méthode play dans la classe Player sont tous des sous-classes de la classe Hero. Une méthode play (Hero hero) peut-elle être utilisée pour faire fonctionner tous les héros ? Cette conception optimisée peut être obtenue en utilisant le polymorphisme.
Succinctement, le polymorphisme est constitué de formes multiples. Les formes polymorphes du carbone dans la nature comprennent le graphite, le diamant, etc., et l'action de coupe comprend la coupe de papier, la coupe de cheveux, etc. La même opération produit des résultats différents en raison de conditions différentes.
Ensuite, le polymorphisme dans le programme fait référence au même type de référence, en utilisant différentes instances pour effectuer différentes opérations (la référence de classe parent spécifie l'objet de sous-classe Hero h=new Daji();
).
Étapes pour implémenter le polymorphisme :
1 Écrivez le parent et les sous-classes relation d'héritage
🎜>2.La sous-classe remplace la méthode de la classe parent
3. Utilisez la référence de laclasse parent pour pointer vers l'objet de la sous-classe
le parent. la classe en tant que paramètres de méthode implémente le polymorphismeUtiliser le polymorphisme pour optimiser le code ci-dessusModifier Hero.java pour ajouter des méthodes d'attaquepackage whyusepolymorphic; public class Hero { //省略属性和构造方法 //攻击的方法 public void attack() { System.out.println(this.getName()+" 发动攻击,伤害为:"+this.getHurt() +"。消耗 20的魔法值"); this.setMagicPoint(getMagicPoint()-20);//魔法值-20 } //省略 getter 和 setter 方法 }Pas besoin de modifier les deux sous-classesModifiez la classe du joueur Player.java et définissez les paramètres de la méthode de lecture sur la classe parent
package whyusepolymorphic; public class Player { public void play(Hero hero) { hero.attack(); } }Modifiez la classe de test
package whyusepolymorphic; public class TestPlay { public static void main(String[] args) { Player p=new Player(); Hero daji=new Daji(100,15,"妲己"); p.play(daji); System.out.println(daji.getName()+" 剩余魔法:"+daji.getMagicPoint()); Hero littleJoe=new LittleJoe(100,10,"小乔"); p.play(littleJoe); System.out.println(littleJoe.getName()+" 剩余魔法:"+littleJoe.getMagicPoint()); } }La classe parent est utilisée comme valeur de retour pour implémenter le polymorphismeLes joueurs achètent des héros en utilisant le polymorphisme. La méthode d'achat a une valeur de retour et renvoie le héros acheté. La classe parent est utilisée comme valeur de retour pour implémenter cette fonction. Modifiez la classe du joueur Player.java et ajoutez une méthode pour obtenir le héros
package whyusepolymorphic; public class Player { public void play(Hero hero) { hero.attack(); } public Hero getHero(int id) { if(1==id) { return new Daji(100,15,"妲己"); }else if(2==id){ return new LittleJoe(100,10,"小乔"); }else { System.out.println("没有这个英雄"); return null; } } }Classe de test
package whyusepolymorphic; import java.util.Scanner; public class TestPlay { public static void main(String[] args) { Player p=new Player(); System.out.println("欢迎来到英雄商店,请选择要购买的英雄:1.妲己2.小乔"); Scanner input=new Scanner(System.in); int id=input.nextInt(); Hero h=p.getHero(id); if(null!=h) { h.attack(); } } }Conversion de la classe parent en classe enfant S'il existe des méthodes spécifiques à la sous-classe dans la sous-classe, la référence de la classe parent ne peut pas appeler les méthodes spécifiques à la sous-classe. Ajouter une méthode queenWorship à Daji.java
package whyusepolymorphic; public class Daji extends Hero{ //省略构造方法及之前其他方法 public void queenWorship() { System.out.println("释放大招:女王崇拜"); } }Ajouter une méthode dazzlingStar à LittleJoe.java
package whyusepolymorphic; public class LittleJoe extends Hero { //省略构造方法及之前其他方法 public void dazzlingStar() { System.out.println("释放大招:星华缭乱"); } }Ajouter une méthode bigMove à Player.java
package whyusepolymorphic; public class Player { //省略构造方法及之前其他方法 public void bigMove(Hero hero) { hero.dazzlingStar(); } }Code trouvé
Erreur signaléehero.dazzlingStar();
Hero joe=new LittleJoe(100,10,"小乔"); Daji daji=(Daji) joe;Mais directement comme cette écriture signalera également une erreur. L'utilisation de l'opérateur instanceof peut garantir qu'il n'y aura pas d'erreurs de conversion Syntaxe :
对象 instanceof 类或接口instanceof est généralement utilisée en conjonction avec une conversion de type forcée Modifier Player.java La méthode bigMove dans
public void bigMove(Hero hero) { if (hero instanceof Daji) { ((Daji)hero).queenWorship(); }else if(hero instanceof LittleJoe) { ((LittleJoe)hero).dazzlingStar(); } }Écrivez le code de test dans la méthode principale
Player p=new Player(); p.bigMove(new LittleJoe(100,10,"小乔")); p.bigMove(new Daji(100,15,"妲己"));Résumé : Ce qui précède est tout le contenu de cet article, J'espère que cela sera utile à l'apprentissage de chacun. Pour plus de didacticiels connexes, veuillez visiter le
Tutoriel vidéo Java, le Tutoriel graphique de développement Java, le Tutoriel vidéo bootstrap !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!