Heim >Java >javaLernprogramm >Was ist Java-Polymorphismus? Die Verwendung von Java-Polymorphismus
Was dieser Artikel bringt, ist, was Java-Polymorphismus ist. Die Verwendung von Java-Polymorphismus wird Ihnen durch einige Funktionen im Spiel helfen, die Verwendung von Polymorphismus zu beherrschen. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.
In einem Kampfspiel (alle Ähnlichkeiten sind rein zufällig) gibt es zwei verschiedene Magierhelden: Xiao Qiao und Daji.
Beide Magierhelden haben Angriffsmethoden. Der Angriffsschaden beträgt 10 und verbraucht 20 Mana. Dajis Angriffsschaden beträgt 15 und verbraucht 30 Mana. Spieler können zwei Helden zum Angriff einsetzen. Werfen wir einen Blick auf den implementierten Code.
Elternklasse – Held: 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 方法 }
Unterklasse – 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 } }
Unterklasse – 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 } }
Spieler: whyusepolymorphic.Player.java
package whyusepolymorphic; public class Player { public void play(LittleJoe littleJoe) { littleJoe.attack(); } public void play(Daji daji) { daji.attack(); } }
Der obige Code implementiert die erforderlichen Funktionen vollständig. Dann wissen wir, dass es nicht nur diese wenigen Helden geben kann, wenn später neue magische Helden hinzugefügt werden anders? ?
Wir können neue Klassen hinzufügen, um Angriffsmethoden zu implementieren, und die Spielerklasse ändern, um Methoden zum Bedienen von Helden hinzuzufügen. Diese Methode kann die Anforderungen der Heldenerweiterung erfüllen, aber wenn später weitere Helden hinzugefügt werden, ist die Wartung für uns nicht so bequem.
Beim Studium des obigen Codes haben wir festgestellt, dass die Parameter der Spielmethode in der Player-Klasse alle Unterklassen der Hero-Klasse sind. Kann eine Spielmethode (Hero Hero) verwendet werden, um alle Helden zu bedienen? Dieses optimierte Design kann durch Polymorphismus erreicht werden.
Kurz gesagt handelt es sich bei Polymorphismus um mehrere Formen. Zu den polymorphen Formen von Kohlenstoff in der Natur gehören Graphit, Diamant usw., und die Schneidwirkung umfasst das Schneiden von Papier, Haarschneiden usw. Der gleiche Vorgang führt aufgrund unterschiedlicher Bedingungen zu unterschiedlichen Ergebnissen.
Dann bezieht sich der Polymorphismus im Programm auf denselben Referenztyp und verwendet unterschiedliche Instanzen, um unterschiedliche Operationen auszuführen (die übergeordnete Klassenreferenz gibt das Unterklassenobjekt Hero h=new Daji();
an).
Schritte zum Implementieren von Polymorphismus:
1. Schreiben Sie übergeordnete und untergeordnete Klassen Vererbungsbeziehung
🎜>2.Die Unterklasse überschreibt die Methode der übergeordneten Klasse
3. Verwenden Sie die Referenz derübergeordneten Klasse, um auf das Objekt der Unterklasse
der übergeordneten Klasse zu verweisen Klasse als Methodenparameter implementieren PolymorphismusVerwenden Sie Polymorphismus, um den obigen Code zu optimierenÄndern Sie Hero.java, um Angriffsmethoden hinzuzufügenpackage whyusepolymorphic; public class Hero { //省略属性和构造方法 //攻击的方法 public void attack() { System.out.println(this.getName()+" 发动攻击,伤害为:"+this.getHurt() +"。消耗 20的魔法值"); this.setMagicPoint(getMagicPoint()-20);//魔法值-20 } //省略 getter 和 setter 方法 }Die beiden Unterklassen müssen nicht geändert werden
Ändern Sie die Player-Klasse Player.java und legen Sie die Parameter der Wiedergabemethode auf die übergeordnete Klasse fest
package whyusepolymorphic; public class Player { public void play(Hero hero) { hero.attack(); } }Ändern Sie die Testklasse
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()); } }Die übergeordnete Klasse als Rückgabewert zur Implementierung von Polymorphismus Spieler kaufen Helden, um die polymorphe Implementierung zu verwenden. Die Kaufmethode hat einen Rückgabewert, gibt den gekauften Helden zurück und die übergeordnete Klasse implementiert diese Funktion als Rückgabewert. Ändern Sie die Spielerklasse Player.java und fügen Sie eine Methode hinzu, um den Helden zu erhalten
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; } } }Testklasse
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(); } } }Konvertierung von der übergeordneten Klasse in eine UnterklasseIf In der Unterklasse gibt es einige Methoden, die nur für Unterklassen gelten, und Referenzen auf übergeordnete Klassen können keine Methoden aufrufen, die nur für Unterklassen gelten. Fügen Sie eine Methode queenWorship zu Daji.java hinzu
package whyusepolymorphic; public class Daji extends Hero{ //省略构造方法及之前其他方法 public void queenWorship() { System.out.println("释放大招:女王崇拜"); } }Fügen Sie eine Methode dazzlingStar zu LittleJoe.java hinzu
package whyusepolymorphic; public class LittleJoe extends Hero { //省略构造方法及之前其他方法 public void dazzlingStar() { System.out.println("释放大招:星华缭乱"); } }Fügen Sie eine bigMove-Methode zu Player.java hinzu
package whyusepolymorphic; public class Player { //省略构造方法及之前其他方法 public void bigMove(Hero hero) { hero.dazzlingStar(); } }Code gefunden
Fehler gemeldethero.dazzlingStar();
Hero joe=new LittleJoe(100,10,"小乔"); Daji daji=(Daji) joe;Aber wenn Sie es direkt so schreiben, wird auch ein Fehler gemeldet Fehler, Instanz der Operation verwenden Das Symbol kann garantieren, dass keine Konvertierungsfehler auftretenSyntax:
对象 instanceof 类或接口instanceof wird normalerweise in Kombination mit erzwungener Typkonvertierung verwendetÄndern Sie den bigMove Methode in Player.java
public void bigMove(Hero hero) { if (hero instanceof Daji) { ((Daji)hero).queenWorship(); }else if(hero instanceof LittleJoe) { ((LittleJoe)hero).dazzlingStar(); } }Testcode in die Hauptmethode schreiben
Player p=new Player(); p.bigMove(new LittleJoe(100,10,"小乔")); p.bigMove(new Daji(100,15,"妲己"));Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, er wird für das Lernen aller hilfreich sein. Weitere verwandte Tutorials finden Sie unter
Java-Video-Tutorial, Java-Entwicklungsgrafik-Tutorial, Bootstrap-Video-Tutorial!
Das obige ist der detaillierte Inhalt vonWas ist Java-Polymorphismus? Die Verwendung von Java-Polymorphismus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!