1. Überblick
Polymorphismus ist nach Kapselung und Vererbung das dritte Hauptmerkmal der Objektorientierung.
Im Leben laufen beispielsweise Laufbewegungen, Kätzchen, Welpen und Elefanten unterschiedlich. Ein weiteres Beispiel ist die Flugbewegung. Auch Insekten, Vögel und Flugzeuge fliegen unterschiedlich. Es ist ersichtlich, dass sich das gleiche Verhalten durch unterschiedliche Dinge in unterschiedlicher Form manifestieren kann. Polymorphismus beschreibt diesen Zustand.
Polymorphismus:
bezieht sich auf dasselbe Verhalten mit mehreren unterschiedlichen Erscheinungsformen.
Prämisse [Wichtige Punkte]
1. Übernehmen oder implementieren [wählen Sie einen]
2. Schreiben Sie die Methode neu , bedeutungslos]
3. Die Referenz der übergeordneten Klasse verweist auf das Unterklassenobjekt [Formatausdruck]
Kostenlose Online-Lernvideoempfehlung: Java-Video
2. Polymorphe Manifestation
Das Format der polymorphen Manifestation:
父类类型 变量名 = new 子类对象; 变量名.方法名();
Typ der übergeordneten Klasse: Bezieht sich auf den Typ der übergeordneten Klasse, der vom Unterklassenobjekt geerbt wird Implementierung Der übergeordnete Schnittstellentyp.
Der Code lautet wie folgt:
Fu f = new Zi(); f.method();
Überprüfen Sie beim Aufruf einer Methode mit Polymorphismus zunächst, ob die Methode in der übergeordneten Klasse If vorhanden ist Wenn nicht, tritt ein Kompilierungsfehler auf. Wenn dies der Fall ist, wird die überschriebene Methode der Unterklasse ausgeführt.
Der Code lautet wie folgt:
Definieren Sie die übergeordnete Klasse:
Definieren Sie die Unterklasse:
Testklasse definieren:
3. Die Vorteile von Polymorphismus
Der eigentliche Entwicklungsprozess In der Methode wird der Typ der übergeordneten Klasse als formaler Parameter der Methode verwendet, um das Unterklassenobjekt an die Methode zu übergeben und die Methode aufzurufen, was die Skalierbarkeit und Bequemlichkeit des Polymorphismus besser widerspiegeln kann.
Der Code lautet wie folgt:
Definieren Sie die übergeordnete Klasse:
Definieren Sie die Unterklasse:
Definieren Sie die Testklasse:
public class Test { public static void main(String[] args) { // 多态形式,创建对象 // Cat c = new Cat(); // Dog d = new Dog(); // 调用showCatEat showCatEat(c); // 调用showDogEat showDogEat(d); /* 以上两个方法, 均可以被showAnimalEat(Animal a)方法所替代而执行效果一致 */ showAnimalEat(c); showAnimalEat(d); } public static void showCatEat(Cat c) { c.eat(); } public static void showDogEat(Dog d) { d.eat(); } public static void showAnimalEat(Animal a) { a.eat(); } }
Wenn die Eat-Methode ausgeführt wird, legt der Polymorphismus fest, dass die von der Unterklasse neu geschriebene Methode ausgeführt wird, sodass der Effekt natürlich mit den Methoden showCatEat und showDogEat übereinstimmt , sodass showAnimalEat die beiden oben genannten Methoden vollständig ersetzen kann.
In Bezug auf die Skalierbarkeit müssen wir die showXxxEat-Methode nicht schreiben. Sie kann direkt mit showAnimalEat vervollständigt werden.
Die Vorteile des Polymorphismus liegen also darin, dass er das Schreiben von Programmen erleichtert und eine gute Skalierbarkeit aufweist.
4. Referenztypkonvertierung
Die polymorphe Transformation ist in zwei Typen unterteilt: Aufwärtstransformation und Abwärtstransformation:
Upcasting
Upcasting: Polymorphismus selbst ist der Prozess des Upcastings eines Unterklassentyps in einen übergeordneten Klassentyp.
Wenn die Referenz der übergeordneten Klasse auf ein Unterklassenobjekt verweist, handelt es sich um eine Aufwärtstransformation.
Verwenden Sie das Format:
父类类型 变量名 = new 子类类型(); 如:Animal a = new Cat();
Downcast
Der Prozess der Abwärtskonvertierung des übergeordneten Klassentyps in den Unterklassentyp. Dieser Prozess ist obligatorisch.
Ein Unterklassenobjekt, das nach oben transformiert wurde, kann das Format der erzwungenen Typkonvertierung verwenden, bei dem es sich um eine Abwärtstransformation handelt.
Format verwenden:
子类类型 变量名 = (子类类型) 父类变量名; 如 :Cat c =(Cat) a;
Transformationsdemonstration, der Code lautet wie folgt:
Klasse definieren:
Definieren Testklasse:
Abnormalität der Transformation
转型的过程中,一不小心就会遇到这样的问题,请看如下代码:
这段代码可以通过编译,但是运行时,却报出了ClassCastException,类型转换异常!这是因为,明明创建了Cat类型对象,运行时,当然不能转换成Dog对象的。这两个类型并没有任何继承关系,不符合类型转换的定义。
为了避免ClassCastException的发生,Java提供了 关键字,给引用变量做类型的校验。
格式如下:
变量名 instanceof 数据类型 如果变量属于该数据类型,返回true。 如果变量不属于该数据类型,返回false。
所以,转换前,我们最好先做一个判断,代码如下:
想学习更多相关教程请访问:java入门学习
Das obige ist der detaillierte Inhalt vonJava objektorientiert – ausführliche Einführung in den Polymorphismus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!