Heim >Java >javaLernprogramm >Was ist Java-Polymorphismus? Die Verwendung von Java-Polymorphismus

Was ist Java-Polymorphismus? Die Verwendung von Java-Polymorphismus

青灯夜游
青灯夜游nach vorne
2018-10-20 17:56:053219Durchsuche

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.

Warum Polymorphismus verwenden?

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.

Was ist Polymorphismus?

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).

So implementieren Sie Polymorphismus

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 Polymorphismus

Verwenden Sie Polymorphismus, um den obigen Code zu optimieren

Ändern Sie Hero.java, um Angriffsmethoden hinzuzufügen

package 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 Unterklasse

If 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();

Zu diesem Zeitpunkt müssen Sie die übergeordnete Klasse in eine Unterklasse konvertieren (erzwungene Typkonvertierung)

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 auftreten

Syntax:

对象 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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen