Was ist Polymorphismus, wofür ist er und wie wird er verwendet?
oop
polymorphism
computer-science
UnkwnTech
quelle
quelle
Antworten:
Wenn Sie über die griechischen Wurzeln des Begriffs nachdenken, sollte dies offensichtlich werden.
Polymorphismus ist also die Fähigkeit (bei der Programmierung), dieselbe Schnittstelle für unterschiedliche zugrunde liegende Formen (Datentypen) darzustellen.
In vielen Sprachen sind beispielsweise Ganzzahlen und Gleitkommazahlen implizit polymorph, da Sie unabhängig von der Tatsache, dass die Typen unterschiedlich sind, addieren, subtrahieren, multiplizieren usw. können. Sie werden im üblichen Sinne selten als Objekte betrachtet.
Auf die gleiche Weise kann eine Klasse wie
BigDecimal
oderRational
oderImaginary
auch diese Operationen bereitstellen, obwohl sie mit unterschiedlichen Datentypen arbeiten.Das klassische Beispiel ist die
Shape
Klasse und alle Klassen, die davon erben können (Quadrat, Kreis, Dodekaeder, unregelmäßiges Polygon, Splat usw.).Mit Polymorphismus hat jede dieser Klassen unterschiedliche zugrunde liegende Daten. Eine Punktform benötigt nur zwei Koordinaten (vorausgesetzt, sie befindet sich natürlich in einem zweidimensionalen Raum). Ein Kreis braucht einen Mittelpunkt und einen Radius. Ein Quadrat oder Rechteck benötigt zwei Koordinaten für die obere linke und untere rechte Ecke und (möglicherweise) eine Drehung. Ein unregelmäßiges Polygon benötigt eine Reihe von Linien.
Indem Sie die Klasse sowohl für ihren Code als auch für ihre Daten verantwortlich machen, können Sie Polymorphismus erzielen. In diesem Beispiel hätte jede Klasse ihre eigene
Draw()
Funktion und der Client-Code könnte einfach Folgendes tun:um das richtige Verhalten für jede Form zu erhalten.
Dies steht im Gegensatz zu der alten Vorgehensweise, bei der der Code von den Daten getrennt war und Sie Funktionen wie
drawSquare()
und hattendrawCircle()
.Objektorientierung, Polymorphismus und Vererbung sind eng miteinander verbundene Konzepte und wichtig zu wissen. Während meiner langen Karriere gab es viele "Silberkugeln", die im Grunde nur zischten, aber das OO-Paradigma hat sich als gut herausgestellt. Lerne es, verstehe es, liebe es - du wirst es nicht bereuen :-)
(a) Ich habe das ursprünglich als Witz geschrieben, aber es hat sich als richtig und daher nicht so lustig herausgestellt. Das Monomer Styrol wird zufällig aus Kohlenstoff und Wasserstoff hergestellt , und Polystyrol wird aus Gruppen davon hergestellt .
C8H8
(C8H8)n
Vielleicht hätte ich sagen sollen, dass ein Polyp viele Vorkommen des Briefes waren,
p
obwohl, jetzt, wo ich den Witz erklären musste, auch das nicht lustig erscheint.Manchmal solltest du einfach aufhören, während du zurück bist :-)
quelle
Poly = many and Morph = change or form
Polymorphismus ist, wenn Sie ein Objekt als generische Version von etwas behandeln können, aber wenn Sie darauf zugreifen, bestimmt der Code, um welchen genauen Typ es sich handelt, und ruft den zugehörigen Code auf.
Hier ist ein Beispiel in C #. Erstellen Sie vier Klassen in einer Konsolenanwendung:
Erstellen Sie nun im Main () des Moduls Folgendes für die Konsolenanwendung:
In diesem Beispiel erstellen wir eine Liste der Basisklasse Fahrzeug, die nicht weiß, wie viele Räder jede ihrer Unterklassen hat, aber weiß, dass jede Unterklasse dafür verantwortlich ist, zu wissen, wie viele Räder sie hat.
Wir fügen dann ein Fahrrad, ein Auto und einen LKW zur Liste hinzu.
Als nächstes können wir jedes Fahrzeug in der Liste durchlaufen und alle identisch behandeln. Wenn wir jedoch auf die Eigenschaften "Räder" jedes Fahrzeugs zugreifen, delegiert die Fahrzeugklasse die Ausführung dieses Codes an die entsprechende Unterklasse.
Dieser Code wird als polymorph bezeichnet, da der genaue Code, der ausgeführt wird, durch die Unterklasse bestimmt wird, auf die zur Laufzeit verwiesen wird.
Ich hoffe das hilft dir.
quelle
Class_Excel
,Class_CSV
um aufgerufen zu werden oder eineReader
Klasse aufgerufen zu haben. In jedem Fall eine Art Iterativ, wenn / then / else irgendwo gespeichert werden muss.Von Verstehen und Anwenden von Polymorphismus in PHP , Danke Steve Guidetti.
quelle
Wenn jemand diesen Leuten CUT sagt
Was wird passieren?
Die obige Darstellung zeigt also, was Polymorphismus (gleicher Name, unterschiedliches Verhalten) in OOP ist.
Wenn Sie zu einem Interview gehen und der Interviewer Sie bittet, in demselben Raum, in dem wir sitzen, ein Live-Beispiel für Polymorphismus zu erzählen / zu zeigen, sagen wir:
Antwort - Tür / Fenster
Fragen Sie sich, wie?
Durch Tür / Fenster - eine Person kann kommen, Luft kann kommen, Licht kann kommen, Regen kann kommen usw.
Um es besser und auf einfache Weise zu verstehen, habe ich das obige Beispiel verwendet. Wenn Sie eine Referenz für den Code benötigen, folgen Sie den obigen Antworten.
quelle
.foo()
Methode haben, sollten sie eine gemeinsame Schnittstelle haben. Dies ist jedoch nicht wahr und führt zu falschen Abstraktionen. Eine Schnittstelle sollte eine Rolle definieren , die gespielt werden soll. Diese kann viele verschiedene Implementierungen haben, aber alle beziehen sich auf denselben Eingabesatz und geben etwas von demselben Ausgabesatz zurück. Die Eingabe in ax.cut(...)
für einen Chirurgen, Stylisten oder Schauspieler ist nicht dieselbe, und die Ausgabe ist auch nicht dieselbe.Einfache Erklärung in Analogie
Der Präsident der Vereinigten Staaten setzt Polymorphismus ein. Wie? Nun, er hat viele Berater:
Jeder sollte nur für eines verantwortlich sein: Beispiel:
Der Präsident ist kein Experte für Zinkbeschichtung oder Quantenphysik. Er weiß nicht viele Dinge - aber er weiß nur eines: wie man das Land regiert.
Ähnlich verhält es sich mit Code: Bedenken und Verantwortlichkeiten sollten auf die relevanten Klassen / Personen aufgeteilt werden. Andernfalls hätte der Präsident buchstäblich alles auf der Welt - die gesamte Wikipedia. Stellen Sie sich vor, Sie hätten die gesamte Wikipedia in einer Klasse Ihres Codes: Es wäre ein Albtraum, sie aufrechtzuerhalten.
Warum ist das eine schlechte Idee für einen Präsidenten, all diese spezifischen Dinge zu wissen?
Wenn der Präsident den Leuten ausdrücklich sagen würde, was zu tun ist, würde dies bedeuten, dass der Präsident genau wissen muss , was zu tun ist. Wenn der Präsident bestimmte Dinge selbst wissen muss, bedeutet dies, dass Sie eine Änderung an zwei Stellen vornehmen müssen, nicht nur an einer.
Wenn die EPA beispielsweise die Verschmutzungsgesetze ändert, müssen Sie in diesem Fall die EPA-Klasse und auch die President-Klasse ändern . Das Ändern von Code an zwei statt an einer Stelle kann gefährlich sein - da die Wartung viel schwieriger ist.
Gibt es einen besseren Ansatz?
Es gibt einen besseren Ansatz: Der Präsident muss die Einzelheiten von nichts kennen - er kann den besten Rat von Leuten verlangen, die speziell damit beauftragt sind, diese Dinge zu tun.
Beispiel - Verwendung eines polymorphen Ansatzes:
Der Präsident bittet die Leute nur, ihn zu beraten - und genau das tut er im wirklichen Leben - und genau das sollte ein guter Präsident tun. Seine Berater reagieren alle unterschiedlich, aber sie alle wissen, was der Präsident damit meint: Advise (). Er hat Hunderte von Leuten, die in sein Büro strömen. Es ist eigentlich egal, wer sie sind. Der Präsident weiß nur, dass er, wenn er sie um "Beratung" bittet, weiß, wie er entsprechend reagieren soll :
Dieser Ansatz ermöglicht es dem Präsidenten, das Land buchstäblich zu regieren, ohne etwas über militärische Angelegenheiten, das Gesundheitswesen oder die internationale Diplomatie zu wissen: Die Details werden den Experten überlassen. Das einzige, was der Präsident wissen muss, ist Folgendes: "Advise ()".
Was Sie nicht wollen:
NEIN! NEIN! NEIN! Im obigen Szenario erledigt der Präsident die ganze Arbeit: Er weiß, wie sich die Truppenzahlen und die bereits bestehenden Bedingungen erhöhen. Dies bedeutet, dass der Präsident, wenn sich die Politik im Nahen Osten ändert, seine Kommandos sowie die Petraeus-Klasse ändern müsste . Wir sollten nur die Petraeus-Klasse wechseln müssen, weil der Präsident sich nicht in solchen Details festsetzen muss. Er muss nichts über die Details wissen. Er muss nur wissen, dass alles erledigt ist, wenn er eine Bestellung aufgibt. Alle Details sollten den Experten überlassen werden.
Auf diese Weise kann der Präsident das tun, was er am besten kann: allgemeine Richtlinien festlegen, gut aussehen und Golf spielen: P.
Wie wird es tatsächlich implementiert - über eine Basisklasse oder eine gemeinsame Schnittstelle
Das ist in der Tat Polymorphismus, kurz gesagt. Wie genau wird es gemacht? Durch "Implementieren einer gemeinsamen Schnittstelle" oder durch Verwenden einer Basisklasse (Vererbung) - siehe die obigen Antworten, die dies genauer beschreiben. (Um dieses Konzept klarer zu verstehen, müssen Sie wissen, was eine Schnittstelle ist, und Sie müssen verstehen, was Vererbung ist. Ohne das könnten Sie Schwierigkeiten haben.)
Mit anderen Worten, Petraeus, Condi und HealthOfficials wären Klassen, die "eine Schnittstelle implementieren" - nennen wir es die
IAdvisor
Schnittstelle, die nur eine Methode enthält :Advise()
. Aber jetzt kommen wir zu den Einzelheiten.Das wäre ideal
Zusammenfassung
Alles, was Sie wirklich wissen müssen, ist Folgendes:
Ich hoffe es hilft dir wirklich. Wenn du nichts verstehst, schreibe einen Kommentar und ich werde es erneut versuchen.
quelle
if healthAdvisor? then do this:
undif petraus then do that etc.
dieses Muster muss wiederholt werden, und das ist unnötig und kompliziert. siehe oben bearbeiten.Polymorphismus ist die Fähigkeit, eine Objektklasse so zu behandeln, als wäre sie die übergeordnete Klasse.
Angenommen, es gibt eine Klasse namens Animal und eine Klasse namens Dog, die von Animal erbt. Polymorphismus ist die Fähigkeit, jedes Hundeobjekt wie folgt als Tierobjekt zu behandeln:
quelle
classes have different functionality while sharing a common interface
Polymorphismus:
Es ist das Konzept der objektorientierten Programmierung. Die Fähigkeit verschiedener Objekte, auf ihre eigene Weise auf identische Nachrichten zu reagieren, wird als Polymorphismus bezeichnet.
Polymorphismus resultiert aus der Tatsache, dass jede Klasse in ihrem eigenen Namespace lebt. Die in einer Klassendefinition zugewiesenen Namen stehen nicht in Konflikt mit Namen, die an einer anderen Stelle außerhalb der Klassendefinition zugewiesen wurden. Dies gilt sowohl für die Instanzvariablen in der Datenstruktur eines Objekts als auch für die Methoden des Objekts:
So wie sich die Felder einer C-Struktur in einem geschützten Namespace befinden, befinden sich auch die Instanzvariablen eines Objekts.
Methodennamen sind ebenfalls geschützt. Im Gegensatz zu den Namen von C-Funktionen sind Methodennamen keine globalen Symbole. Der Name einer Methode in einer Klasse kann nicht mit Methodennamen in anderen Klassen in Konflikt stehen. Zwei sehr unterschiedliche Klassen können identisch benannte Methoden implementieren.
Methodennamen sind Teil der Schnittstelle eines Objekts. Wenn eine Nachricht gesendet wird, in der ein Objekt aufgefordert wird, etwas zu tun, benennt die Nachricht die Methode, die das Objekt ausführen soll. Da verschiedene Objekte Methoden mit demselben Namen haben können, muss die Bedeutung einer Nachricht relativ zu dem bestimmten Objekt verstanden werden, das die Nachricht empfängt. Dieselbe Nachricht, die an zwei verschiedene Objekte gesendet wird, kann zwei verschiedene Methoden aufrufen.
Der Hauptvorteil des Polymorphismus besteht darin, dass er die Programmierschnittstelle vereinfacht. Es können Konventionen festgelegt werden, die Klasse für Klasse wiederverwendet werden können. Anstatt für jede neue Funktion, die Sie einem Programm hinzufügen, einen neuen Namen zu erfinden, können dieselben Namen wiederverwendet werden. Die Programmierschnittstelle kann als eine Reihe abstrakter Verhaltensweisen beschrieben werden, ganz abgesehen von den Klassen, die sie implementieren.
Beispiele:
Beispiel 1: Hier ist ein einfaches Beispiel, das in Python 2.x geschrieben wurde .
Beispiel-2: Polymorphismus ist implementiert in Java unter Verwendung von Verfahren Überlastungen und Verfahren überschreiben Konzepte.
Betrachten wir das Beispiel eines Autos zur Diskussion des Polymorphismus. Nehmen Sie jede Marke wie Ford, Honda, Toyota, BMW, Benz usw., alles ist vom Typ Auto.
Aber jeder hat seine eigenen erweiterten Funktionen und fortschrittlicheren Technologien für sein Bewegungsverhalten.
Lassen Sie uns nun einen Basistyp Auto erstellen
Car.java
Lassen Sie uns das Ford Car-Beispiel implementieren.
Ford erweitert den Typ Auto, um alle seine Mitglieder (Eigenschaften und Methoden) zu erben.
Ford.java
Die obige Ford-Klasse erweitert die Car-Klasse und implementiert auch die move () -Methode. Obwohl Ford die Verschiebungsmethode bereits über die Vererbung zur Verfügung steht, hat Ford die Methode immer noch auf seine eigene Weise implementiert. Dies wird als Methodenüberschreibung bezeichnet.
Honda.java
Genau wie Ford erweitert Honda auch den Autotyp und implementiert die Bewegungsmethode auf seine eigene Weise.
Das Überschreiben von Methoden ist ein wichtiges Merkmal, um den Polymorphismus zu ermöglichen. Durch das Überschreiben von Methoden können die Untertypen die Funktionsweise der Methoden ändern, die durch die Vererbung verfügbar sind.
PolymorphismExample.java
Polymorphismus Beispiel Ausgabe:
In der Hauptmethode der PolymorphismExample-Klasse habe ich drei Objekte erstellt - Car, Ford und Honda. Alle drei Objekte werden vom Fahrzeugtyp referenziert.
Bitte beachten Sie hier einen wichtigen Punkt, dass sich ein Superklassentyp auf einen Objekttyp der Unterklasse beziehen kann, der umgekehrte Vers jedoch nicht möglich ist. Der Grund dafür ist, dass alle Mitglieder der Superklasse der Unterklasse mithilfe der Vererbung zur Verfügung stehen. Während der Kompilierungszeit versucht der Compiler zu bewerten, ob der von uns verwendete Referenztyp die Methode aufweist, auf die er zugreifen möchte.
Für die Referenzen car, f und h im PolymorphismExample existiert die Verschiebungsmethode vom Typ Car. Der Compiler besteht den Kompilierungsprozess also ohne Probleme.
Bei der Laufzeitausführung ruft die virtuelle Maschine jedoch die Methoden für die Objekte auf, bei denen es sich um Untertypen handelt. Daher wird die Methode move () aus ihren jeweiligen Implementierungen aufgerufen.
Alle Objekte sind also vom Typ Car, aber während der Laufzeit hängt die Ausführung von dem Objekt ab, auf dem der Aufruf erfolgt. Dies nennt man Polymorphismus.
quelle
Normalerweise bezieht sich dies auf die Fähigkeit eines Objekts vom Typ A, sich wie ein Objekt vom Typ B zu verhalten. Bei der objektorientierten Programmierung wird dies normalerweise durch Vererbung erreicht. Einige Wikipedia-Links, um mehr zu lesen:
EDIT: defekte Links behoben.
quelle
classes have different functionality while sharing a common interface
Polymorphismus ist dies:
Sie können nur einen Pokal anstelle einer bestimmten Instanz übergeben. Dies hilft im Allgemeinen, da Sie nicht für jeden Bechertyp eine bestimmte Measure () - Instanz angeben müssen
quelle
Ich weiß, dass dies eine ältere Frage mit vielen guten Antworten ist, aber ich möchte eine Antwort mit einem Satz hinzufügen:
Es gibt viele Beispiele oben, die dies in Aktion zeigen, aber ich denke, dies ist eine gute, prägnante Antwort.
quelle
(Ich habe einen anderen Artikel über etwas ganz anderes durchgesehen ... und Polymorphismus ist aufgetaucht ... Jetzt dachte ich, ich wüsste, was Polymorphismus ist ... aber anscheinend nicht auf diese schöne Weise erklärt ... Wollte es irgendwo aufschreiben ... besser noch wird es teilen ...)
http://www.eioba.com/a/1htn/how-i-explained-rest-to-my-wife
Lesen Sie weiter aus diesem Teil:
..... Polymorphismus. Das ist eine geekige Art zu sagen, dass auf verschiedene Substantive dasselbe Verb angewendet werden kann.
quelle
Im Allgemeinen ist es die Möglichkeit, eine Reihe verschiedener Objekttypen mit derselben oder einer oberflächlich ähnlichen API zu verbinden. Es gibt verschiedene Formen:
Funktionsüberladung: Definieren mehrerer Funktionen mit demselben Namen und verschiedenen Parametertypen, z. B. sqrt (float), sqrt (double) und sqrt (complex). In den meisten Sprachen, die dies zulassen, wählt der Compiler automatisch das richtige für den Typ des Arguments aus, das an ihn übergeben wird. Dies ist also ein Polymorphismus zur Kompilierungszeit.
Virtuelle Methoden in OOP: Eine Methode einer Klasse kann verschiedene Implementierungen aufweisen, die auf die Besonderheiten ihrer Unterklassen zugeschnitten sind. Jedes dieser Elemente soll die in der Basisklasse angegebene Implementierung überschreiben. Bei einem Objekt, das zur Basisklasse oder einer ihrer Unterklassen gehören kann, wird die richtige Implementierung im laufenden Betrieb ausgewählt. Dies ist also ein Laufzeitpolymorphismus.
Vorlagen: Eine Funktion einiger OO-Sprachen, mit der eine Funktion, Klasse usw. durch einen Typ parametrisiert werden kann. Beispielsweise können Sie eine generische Vorlagenliste "Liste" definieren und sie dann als "Liste von Ganzzahlen", "Liste von Zeichenfolgen", möglicherweise sogar "Liste von Listen von Zeichenfolgen" oder dergleichen instanziieren. Im Allgemeinen schreiben Sie den Code einmal für eine Datenstruktur eines beliebigen Elementtyps, und der Compiler generiert Versionen davon für die verschiedenen Elementtypen.
quelle
Der Begriff Polymorphismus stammt von:
poly = viele
Morphismus = die Fähigkeit zur Veränderung
Beim Programmieren ist Polymorphismus eine "Technik", mit der Sie ein Objekt als mehr als eine Art von Dingen "betrachten" können. Zum Beispiel:
Ein Schülerobjekt ist auch ein Personenobjekt. Wenn Sie den Schüler "anschauen" (dh besetzen), können Sie wahrscheinlich nach dem Studentenausweis fragen. Das kann man nicht immer mit einer Person machen, oder? (Eine Person ist nicht unbedingt ein Student, hat also möglicherweise keinen Studentenausweis.) Eine Person hat jedoch wahrscheinlich einen Namen. Ein Student auch.
Unterm Strich kann das "Betrachten" desselben Objekts aus verschiedenen "Winkeln" unterschiedliche "Perspektiven" ergeben (dh unterschiedliche Eigenschaften oder Methoden).
Mit dieser Technik können Sie also Dinge erstellen, die aus verschiedenen Blickwinkeln "betrachtet" werden können.
Warum verwenden wir Polymorphismus? Für den Anfang ... Abstraktion. An dieser Stelle sollte es genug Infos geben :)
quelle
Verwenden wir eine Analogie. Für ein bestimmtes musikalisches Drehbuch gibt jede Musikerin, die es spielt, ihre eigene Note in der Interpretation.
Musiker können mit Schnittstellen abstrahiert werden. Das Genre, zu dem der Musiker gehört, kann eine abstrakte Klasse sein, die einige globale Interpretationsregeln definiert, und jeder Musiker, der spielt, kann mit einer konkreten Klasse modelliert werden.
Wenn Sie ein Hörer des Musikwerks sind, haben Sie einen Verweis auf das Drehbuch, z. B. Bachs 'Fuga and Tocata', und jeder Musiker, der es aufführt, macht es auf seine eigene Weise polymorph.
Dies ist nur ein Beispiel für ein mögliches Design (in Java):
quelle
AnnHalloway
und dasVictorBorga
Gefühl, sie sollten eher Objekte als Klassen sein - Ihr Beispiel würde sich besser mit z.public class Pianist implements Musician
undvictorBorge = new Pianist();
etc.Ich habe einen allgemeinen Überblick über Polymorphismus für eine andere Frage gegeben:
Polymorphismus in c ++
Ich hoffe es hilft. Ein Auszug...
(Fortsetzung bei Polymorphism in c ++ )
quelle
Polymorphismus ist eine Fähigkeit des Objekts, die in vielen Formen angenommen werden kann. Zum Beispiel kann ein Mann in der menschlichen Klasse in vielen Formen handeln, wenn wir über Beziehungen sprechen. EX: Ein Mann ist Vater seines Sohnes und er ist Ehemann seiner Frau und er ist Lehrer seiner Schüler.
quelle
Polymorphismus ist die Fähigkeit eines Objekts, viele Formen anzunehmen. Die häufigste Verwendung von Polymorphismus in OOP tritt auf, wenn eine übergeordnete Klassenreferenz verwendet wird, um auf ein untergeordnetes Klassenobjekt zu verweisen. In diesem in Java geschriebenen Beispiel haben wir drei Fahrzeugtypen. Wir erstellen drei verschiedene Objekte und versuchen, ihre Radmethode auszuführen:
Das Ergebnis ist:
Weitere Informationen finden Sie unter https://github.com/m-vahidalizadeh/java_advanced/blob/master/src/files/PolymorphismExample.java . Ich hoffe, es hilft.
quelle
Polymorphismus ist die Fähigkeit des Programmierers, gleichnamige Methoden zu schreiben, die je nach den Anforderungen dieser Objekte unterschiedliche Aufgaben für verschiedene Objekttypen ausführen. Wenn Sie beispielsweise eine aufgerufene Klasse
Fraction
und eine aufgerufene Klasse entwickelnComplexNumber
, enthalten beide möglicherweise eine aufgerufene Methodedisplay()
, aber jede von ihnen würde diese Methode anders implementieren. In PHP können Sie es beispielsweise folgendermaßen implementieren:Ausgänge:
Einige der anderen Antworten scheinen zu implizieren, dass Polymorphismus nur in Verbindung mit Vererbung verwendet wird; zum Beispiel, vielleicht
Fraction
undComplexNumber
sowohl eine abstrakte Klasse implementieren genannt ,Number
die eine Methode hatdisplay()
, die Fraktion und Komplexe sind dann verpflichtet , beide zu implementieren. Sie benötigen jedoch keine Vererbung, um den Polymorphismus nutzen zu können.Zumindest in dynamisch typisierten Sprachen wie PHP (ich kenne C ++ oder Java nicht) ermöglicht Polymorphismus dem Entwickler, eine Methode aufzurufen, ohne den Objekttyp im Voraus zu kennen, und darauf zu vertrauen, dass die korrekte Implementierung der Methode funktioniert heißen. Angenommen, der Benutzer wählt den Typ der
Number
erstellten:In diesem Fall wird die entsprechende
display()
Methode aufgerufen, obwohl der Entwickler nicht im Voraus wissen kann, ob der Benutzer einen Bruch oder eine komplexe Zahl auswählt.quelle
In der objektorientierten Programmierung bezieht sich Polymorphismus auf die Fähigkeit einer Programmiersprache , Objekte je nach Datentyp oder Klasse unterschiedlich zu verarbeiten . Insbesondere ist es die Möglichkeit, Methoden für abgeleitete Klassen neu zu definieren.
quelle
Polymorphismus bedeutet wörtlich mehrere Formen. (oder viele Formulare): Objekt aus verschiedenen Klassen und derselben Namensmethode, aber Workflows sind unterschiedlich. Ein einfaches Beispiel wäre:
Betrachten Sie eine Person X.
Er ist nur eine Person, aber er handelt genauso viele. Sie können fragen, wie:
Er ist ein Sohn seiner Mutter. Ein Freund zu seinen Freunden. Ein Bruder seiner Schwester.
quelle
Polymorphismus in OOP bedeutet, dass eine Klasse verschiedene Typen haben kann. Vererbung ist eine Möglichkeit, Polymorphismus zu implementieren.
beispielsweise Form ist eine Schnittstelle, es hat Platz , Kreis , Diamant - Subtypen. Wenn Sie ein Quadrat-Objekt haben, können Sie Quadrat automatisch in Form umwandeln, da Quadrat eine Form ist. Wenn Sie jedoch versuchen, Shape to Square herunterzuspielen, müssen Sie explizite Typumwandlungen durchführen, da Sie nicht sagen können, dass Shape Square ist, sondern auch Circle. Sie müssen es also manuell mit Code umwandeln.
Square s = (Square)shape
Wenn die Form Kreis ist, erhalten Sie siejava.lang.ClassCastException
, da Kreis nicht Quadrat ist.quelle
Polymorphismus:
Eine Referenzvariable vom Schnittstellentyp kann auf jede der Klasseninstanzen verweisen, die diese Schnittstelle implementieren.
quelle
Polymorphismus ist die Fähigkeit, ein Objekt in einer bestimmten Klasse zu verwenden, wobei alle Komponenten, aus denen das Objekt besteht, von Unterklassen der angegebenen Klasse geerbt werden. Dies bedeutet, dass, sobald dieses Objekt von einer Klasse deklariert wurde, alle Unterklassen darunter (und ihre Unterklassen usw., bis Sie die am weitesten entfernte Unterklasse erreichen) das Objekt und seine Komponenten (Make-up) erben.
Denken Sie daran, dass jede Klasse in separaten Dateien gespeichert werden muss.
Der folgende Code veranschaulicht den Polymorphismus:
Die SuperClass:
Der Vater, eine Unterklasse:
Das Kind, eine andere Unterklasse:
Die Ausführungsmethode verweist auf die zu startende übergeordnete Klasse:
Beachten Sie, dass jede Klasse in separaten * .java-Dateien deklariert werden muss. Der Code sollte kompiliert werden. Beachten Sie auch, dass Sie maidenName und familyTree weiter unten kontinuierlich verwenden können. Das ist das Konzept des Polymorphismus. Das Konzept der Vererbung wird auch hier untersucht, wo eine Klasse verwendet werden kann oder durch eine Unterklasse weiter definiert wird.
Hoffe das hilft und macht es klar. Ich werde die Ergebnisse veröffentlichen, wenn ich einen Computer finde, mit dem ich den Code überprüfen kann. Danke für die Geduld!
quelle
Durch Polymorphismus kann dieselbe Routine (Funktion, Methode) auf verschiedene Typen einwirken.
Da viele vorhandene Antworten die Subtypisierung mit dem Polymorphismus verbinden, gibt es drei Möglichkeiten (einschließlich der Subtypisierung), um den Polymorphismus zu implementieren.
Siehe auch:
http://wiki.c2.com/?CategoryPolymorphism
https://en.wikipedia.org/wiki/Polymorphism_(computer_science)
quelle
In objektorientierten Sprachen ermöglicht der Polymorphismus die Behandlung und Behandlung verschiedener Datentypen über dieselbe Schnittstelle. Betrachten Sie beispielsweise die Vererbung in C ++: Klasse B wird von Klasse A abgeleitet. Ein Zeiger vom Typ A * (Zeiger auf Klasse A) kann verwendet werden, um sowohl ein Objekt der Klasse A als auch ein Objekt der Klasse B zu behandeln.
quelle
Polymorphismus in Codierungsbegriffen ist, wenn Ihr Objekt durch Vererbung usw. als mehrere Typen existieren kann. Wenn Sie eine Klasse mit dem Namen "Form" erstellen, die die Anzahl der Seiten Ihres Objekts definiert, können Sie eine neue Klasse erstellen, die es erbt, z. B. "Quadrat" ". Wenn Sie anschließend eine Instanz von "Square" erstellen, können Sie diese nach Bedarf von "Shape" auf "Square" vor- und zurückschalten.
quelle
Polymorphismus gibt Ihnen die Möglichkeit, ein Modul zu erstellen, das ein anderes aufruft, und dennoch den Abhängigkeitspunkt der Kompilierungszeit vom Kontrollfluss anstelle des Kontrollflusses festzulegen.
Durch die Verwendung von Polymorphismus hängt ein High-Level-Modul nicht von einem Low-Level-Modul ab. Beide hängen von Abstraktionen ab. Dies hilft uns, das Prinzip der Abhängigkeitsinversion anzuwenden ( https://en.wikipedia.org/wiki/Dependency_inversion_principle ).
Hier habe ich die obige Definition gefunden. Etwa 50 Minuten nach Beginn des Videos erklärt der Ausbilder das Obige. https://www.youtube.com/watch?v=TMuno5RZNeE
quelle
Was ist Polymorphismus?
Polymorphismus ist die Fähigkeit:
Rufen Sie eine Operation für eine Instanz eines spezialisierten Typs auf, indem Sie nur ihren verallgemeinerten Typ kennen, während Sie die Methode des spezialisierten Typs und nicht die des verallgemeinerten Typs aufrufen: Es handelt sich um dynamischen Polymorphismus .
Definieren Sie mehrere Methoden mit dem Speichernamen, aber unterschiedlichen Parametern: Es handelt sich um statischen Polymorphismus .
Die erste ist die historische Definition und die wichtigste.
Wofür wird Polymorphismus verwendet?
Es ermöglicht die Erstellung einer stark typisierten Konsistenz der Klassenhierarchie und einige magische Dinge wie das Verwalten von Listen von Objekten unterschiedlicher Typen, ohne deren Typen, aber nur einen ihrer übergeordneten Typen zu kennen, sowie Datenbindungen.
Starkes und schwaches Tippen
Stichprobe
Hier sind einige Formen wie Punkt, Linie, Rechteck und Kreis, bei denen die Operation Draw () entweder nichts oder einen Parameter verwendet, um eine Zeitüberschreitung zum Löschen festzulegen.
Hier sollten die Shape-Klasse und die Shape.Draw () -Methoden als abstrakt markiert werden.
Sie sind nicht zum Verstehen gedacht.
Erklärung
Ohne Polymorphismus, mit abstrakter-virtueller Überschreibung, während die Formen analysiert werden, weiß nur die Spahe.Draw () -Methode, die als CLR aufgerufen wird, nicht, welche Methode aufgerufen werden soll. Es wird also die Methode des Typs aufgerufen, auf den wir reagieren, und hier ist der Typ aufgrund der Listendeklaration Form. Der Code macht also überhaupt nichts.
Mit Polymorphismus kann die CLR mithilfe einer sogenannten virtuellen Tabelle auf den realen Typ des Objekts schließen , auf das wir einwirken. Also ruft es die gute Methode auf, und hier ruft Shape.Draw (), wenn Shape is Point ist, Point.Draw () auf. Der Code zeichnet also die Formen.
Weitere Lesungen
C # - Polymorphismus (Stufe 1)
Polymorphismus in Java (Stufe 2)
Polymorphismus (C # -Programmierhandbuch)
Virtuelle Methodentabelle
quelle