Was ist Polymorphismus, wozu dient er, und wie wird er eingesetzt?
Antworten
Zu viele Anzeigen?Polymorphismus ist die Fähigkeit, eine Klasse von Objekten so zu behandeln, als wäre sie die übergeordnete Klasse.
Nehmen wir zum Beispiel an, es gibt eine Klasse namens Animal und eine Klasse namens Dog, die von Animal erbt. Polymorphismus ist die Fähigkeit, jedes Dog-Objekt wie ein Animal-Objekt zu behandeln:
Dog* dog = new Dog;
Animal* animal = dog;
Polymorphismus:
Die Fähigkeit verschiedener Objekte, auf identische Nachrichten auf jeweils eigene Weise zu reagieren, wird als Polymorphismus bezeichnet.
Polymorphismus ergibt sich aus der Tatsache, dass jede Klasse in ihrem eigenen Namensraum lebt. Die Namen, die innerhalb einer Klassendefinition vergeben werden, stehen nicht im Widerspruch zu Namen, die außerhalb der Klasse vergeben werden. Dies gilt sowohl für die Instanzvariablen in der Datenstruktur eines Objekts als auch für die Methoden des Objekts:
-
So wie die Felder einer C-Struktur in einem geschützten Namensraum liegen, so sind die Instanzvariablen eines Objekts.
-
Die Methodennamen sind ebenfalls geschützt. Anders als die Namen von C-Funktionen, sind Methodennamen keine globalen Symbole. Der Name einer Methode in einer Klasse kann nicht mit Methodennamen in anderen Klassen kollidieren; zwei zwei sehr unterschiedliche Klassen können identisch benannte Methoden implementieren.
Methodennamen sind Teil der Schnittstelle eines Objekts. Wenn eine Nachricht gesendet wird, die ein Objekt auffordert, etwas zu tun, nennt 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 in Bezug auf das jeweilige Objekt, das die Nachricht erhält, verstanden werden. Die gleiche Nachricht, die an zwei verschiedene Objekte gesendet wird, kann zwei verschiedene Methoden aufrufen.
Der Hauptvorteil der Polymorphie besteht darin, dass sie die Programmierschnittstelle vereinfacht. Sie ermöglicht die Festlegung von Konventionen, die in jeder 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 von abstrakten Verhaltensweisen beschrieben werden, ganz unabhängig von den Klassen, die sie implementieren.
Beispiele:
Beispiel 1: Hier ein einfaches Beispiel, geschrieben in Python 2.x .
class Animal:
def __init__(self, name): # Constructor of the class
self.name = name
def talk(self): # Abstract method, defined by convention only
raise NotImplementedError("Subclass must implement abstract method")
class Cat(Animal):
def talk(self):
return 'Meow!'
class Dog(Animal):
def talk(self):
return 'Woof! Woof!'
animals = [Cat('Missy'),
Dog('Lassie')]
for animal in animals:
print animal.name + ': ' + animal.talk()
Beispiel 2: Der Polymorphismus ist implementiert in Java Methode anwenden Überlastung und Methode Übergeordnetes Konzepte.
Betrachten wir das Beispiel Car, um den Polymorphismus zu diskutieren. Nehmen Sie eine beliebige Marke wie Ford, Honda, Toyota, BMW, Benz usw., alles ist vom Typ Auto.
Aber jeder hat seine eigenen fortschrittlichen Funktionen und eine fortschrittlichere Technologie, die in ihr Bewegungsverhalten involviert ist.
Lassen Sie uns nun einen Basistyp Car erstellen
Auto.java
public class Car {
int price;
String name;
String color;
public void move(){
System.out.println("Basic Car move");
}
}
Lassen Sie uns das Beispiel des Ford Car umsetzen.
Ford erweitert den Typ Car, um alle seine Mitglieder (Eigenschaften und Methoden) zu erben.
Ford.java
public class Ford extends Car{
public void move(){
System.out.println("Moving with V engine");
}
}
Die obige Ford-Klasse erweitert die Car-Klasse und implementiert auch die move()-Methode. Obwohl die move-Methode durch die Vererbung bereits für Ford verfügbar ist, hat Ford die Methode dennoch auf seine eigene Weise implementiert. Dies wird als Methodenüberschreibung bezeichnet.
Honda.java
public class Honda extends Car{
public void move(){
System.out.println("Move with i-VTEC engine");
}
}
Genau wie Ford erweitert auch Honda den Typ Car und implementiert die Move-Methode auf seine eigene Weise.
Methodenüberschreibung ist ein wichtiges Merkmal, um den Polymorphismus zu ermöglichen. Mit der Methodenüberschreibung können die Untertypen die Funktionsweise der Methoden ändern, die durch die Vererbung verfügbar sind.
PolymorphismusBeispiel.java
public class PolymorphismExample {
public static void main(String[] args) {
Car car = new Car();
Car f = new Ford();
Car h = new Honda();
car.move();
f.move();
h.move();
}
}
Polymorphismus Beispiel Output:
In der Hauptmethode der Klasse PolymorphismExample habe ich drei Objekte erstellt: Car, Ford und Honda. Alle drei Objekte werden durch den Typ Car referenziert.
Bitte beachten Sie hier einen wichtigen Punkt: Ein Oberklassentyp kann sich auf einen Unterklassentyp eines Objekts beziehen, aber der umgekehrte Fall ist nicht möglich. Der Grund dafür ist, dass alle Mitglieder der Oberklasse der Unterklasse über die Vererbung zur Verfügung stehen und der Compiler während der Kompilierung versucht zu ermitteln, ob der von uns verwendete Referenztyp über die Methode verfügt, auf die er zuzugreifen versucht.
Für die Referenzen car,f und h im PolymorphismExample existiert also die move-Methode vom Typ Car. Der Compiler durchläuft also den Kompilierungsprozess ohne Probleme.
Wenn es jedoch zur Laufzeitausführung kommt, ruft die virtuelle Maschine die Methoden auf den Objekten auf, die Untertypen sind. Die Methode move() wird also von ihren jeweiligen Implementierungen aufgerufen.
Alle Objekte sind also vom Typ Auto, aber während der Laufzeit hängt die Ausführung von dem Objekt ab, auf dem der Aufruf erfolgt. Dies wird als Polymorphismus bezeichnet.
Polymorphismus ist dies:
class Cup {
int capacity
}
class TeaCup : Cup {
string flavour
}
class CoffeeCup : Cup {
string brand
}
Cup c = new CoffeeCup();
public int measure(Cup c) {
return c.capacity
}
können Sie statt einer bestimmten Instanz auch nur einen Cup übergeben. Dies trägt zur Allgemeinheit bei, da Sie nicht für jeden Bechertyp eine eigene measure()-Instanz bereitstellen müssen
(Ich habe in einem anderen Artikel über etwas ganz anderes gestöbert... und Polymorphismus tauchte auf... Jetzt dachte ich, ich wüsste, was Polymorphismus ist...., aber anscheinend nicht auf diese schöne Art erklärt... Ich wollte es irgendwo aufschreiben... besser noch, ich werde es teilen... )
http://www.eioba.com/a/1htn/how-i-explained-rest-to-my-wife
lesen Sie ab diesem Teil weiter:
..... Polymorphismus. Das ist eine umständliche Art zu sagen, dass auf verschiedene Substantive das gleiche Verb angewandt werden kann.