Beim Java-Studium bin ich auf das Konzept des Polymorphismus gestoßen. Ich neige dazu, die Grundprinzipien zu begreifen, bevor ich mich mit der praktischen Anwendung befasse, deshalb habe ich meine Interpretation hier dokumentiert.
Die ursprüngliche Bedeutung von Polymorphismus ist „Vielfalt“. Im Kontext dieses Artikels bezieht es sich jedoch auf die Fähigkeit einer Variablen, Objekte unterschiedlichen Typs zu speichern, solange eine Beziehung durch Klassenvererbung oder Schnittstellenimplementierung besteht, ohne Fehler zu verursachen.
Im Allgemeinen entspricht der Typ einer Variablen dem Typ des Objekts, auf das sie verweist.
Animal animal = new Animal();
Wenn das Objekt jedoch eine Klasse erweitert, kann die Variable als Typ der Oberklasse behandelt werden.
Animal animal = new Dog(); // Dog extends Animal
Wenn ein Objekt außerdem eine Schnittstelle implementiert, kann es als Schnittstellentyp behandelt werden.
// Interface definition interface Animal { void makeSound(); // Method in the interface } // Classes implementing the interface class Dog implements Animal { public void makeSound() { System.out.println("Woof!"); // Dog-specific implementation } } class Cat implements Animal { public void makeSound() { System.out.println("Meow!"); // Cat-specific implementation } } // Main method public class Main { public static void main(String[] args) { // Assign objects to variables of the interface type Animal myDog = new Dog(); Animal myCat = new Cat(); // Call the interface method myDog.makeSound(); // Outputs "Woof!" myCat.makeSound(); // Outputs "Meow!" } }
Dadurch können wir verschiedene Klassen als denselben Typ behandeln und so eine flexible Codierung ermöglichen.
Bei der Diskussion darüber, wie sich der Typ einer Variablen vom Typ eines Objekts unterscheidet, stellt sich die Frage: Was genau ist ein „Typ“? Aufgrund meiner Analyse bin ich zu dem Schluss gekommen, dass ein Typ den folgenden Zwecken dient:
Bezugnahme auf das frühere Beispiel:
Animal animal = new Dog(); // Dog extends Animal
Dies impliziert, dass Speicher für Dog reserviert ist, die Variable den Inhalt jedoch als Animal interpretiert. Das Konzept kann wie folgt visualisiert werden:
Ein Typ fungiert wie eine Filterlinse und bestimmt, wie die Daten wahrgenommen werden. Durch den Wechsel der Linse können Sie sich auf gängige Methoden in der Oberklasse oder spezifische Methoden über Schnittstellen konzentrieren.
Man könnte sich fragen, warum wir Variablen nicht immer mit der Superklasse deklarieren, wenn der Vorteil des Polymorphismus darin besteht, gemeinsame Methoden klassenübergreifend zu handhaben. Der Grund dafür ist, dass in solchen Fällen nur Speicher für die Daten der Oberklasse reserviert wird.
Während es möglich ist, eine Unterklasse in eine Oberklasse umzuwandeln (Upcasting), ist das Gegenteil nicht der Fall. Dies liegt daran, dass eine Unterklasse Daten aus der Oberklasse sowie ihre eigenen eindeutigen Daten enthält. Daher wird der Unterklasse vorab Speicher zugewiesen, was die Verwendung unterklassenspezifischer Methoden durch Upcasting ermöglicht.
Schnittstellen fungieren auch als Typen, und ihre Rolle als Filterlinsen für die Verarbeitung der im Objektspeicher gespeicherten Daten ähnelt konzeptionell der von Klassen. Die über die Schnittstelle aufgerufenen Methoden werden durch den Objekttyp und nicht durch den Variablentyp bestimmt (dynamische Bindung). Dies bestärkt die Idee, dass der Typ der Variablen lediglich als Filter fungiert und es uns ermöglicht, die gefilterten Daten zu nutzen.
Polymorphismus ist in Szenarien nützlich, in denen gemeinsame Prozesse vereinheitlicht und gleichzeitig individuelle Merkmale genutzt werden müssen. Durch meine Erkundung erlangte ich ein besseres Verständnis dafür, dass das Speicherlayout eines Objekts zwar weiterhin durch seinen Typ bestimmt wird, der Typ der Variablen jedoch steuert, wie dieser Speicher interpretiert wird – eine wichtige Erkenntnis für mich.
Das obige ist der detaillierte Inhalt vonWas ist Polymorphismus? Erkunden von Typ-Objekt-Beziehungen in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!