Zitat von
Medium:
Dieser Artikel ist eventuell passender. Bei Polymorphie geht's letztlich darum, dass Methoden einer Klasse auch die Implementierung einer "späteren" Ableitung verwenden kann - hat also an sich erst mal herzlich wenig mit Mehrfachvererbung zu tun (was das oben beschriebene Ableiten von mehreren Klassen bzw. Implementieren von Interfaces wäre). Das heisst bisher waren alle Antworten in diesem Thread falsch.
Wichtig ist in diesem Zusammenhang auch noch das Konzept virtueller Methoden/Klassen, die in der Regel Polymorphie ermöglichen.
Vererbung und Polymorphie sind also keine nebeneinander stehenden Konzepte, sondern Polymorphie kann in einer Vererbungshierachie gegeben sein, oder auch nicht.
Gut, der Preis für die schönste Formulierung geht an dich
Das gleiche habe ich aber im Grunde auch sagen wollen...
@speedax: Bitte keine Doppel-Posts.
[EDIT]
(verdammt, ich bin langsam)
Zitat von
Medium:
Edit: Namenlozer liegt nicht ganz daneben übrigens. Was du zeigst, ist wie eine Polymorphie angewendet aussehen kann, es ist aber nicht klar, dass bei dir TFahrzeug die Methode Fahre der Klasse TAuto aufruft - dann wäre diese nämlich polymorph. Sie könnte aber auch einfach überschrieben/reintroduced sein!
Ah, ich verstehe was du meinst. Ja, ist vielleicht etwas missverständlich, gebe ich zu. Ich hatte versucht, dass Beispiel so schlank wie möglich zu halten.
Ich habe es mal etwas abgeändert:
Delphi-Quellcode:
interface
types
TFahrzeug = class
procedure MacheGeraeusch; virtual; abstract;
procedure Fahre;
end;
TAuto = class(TFahrzeug)
procedure MacheGeraeusch; override;
end;
TFahrrad = class(TFahrzeug)
procedure MacheGeraeusch; override;
end;
implementation
procedure TFahrzeug.Fahre;
begin
ShowMessage('Start');
MacheGerauesch;
ShowMessage('Ziel erreicht');
end;
procedure TAuto.MacheGeraeusch;
begin
ShowMessage('Brumm');
end;
procedure TFahrrad.MacheGeraeusch;
begin
ShowMessage('Quietsch?');
end;
var
UnbekanntesFahrObjekt: TFahrzeug;
begin
UnbekanntesFahrObjekt := TAuto.Create:
UnbekanntesFahrObjekt.Fahre;
UnbekanntesFahrObjekt.Free;
UnbekanntesFahrObjekt := TFahrrad.Create:
UnbekanntesFahrObjekt.Fahre;
UnbekanntesFahrObjekt.Free;
end
[/EDIT]