Einzelnen Beitrag anzeigen

Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#16

Re: unterschied VERERBUNG & POLYMORPHIE

  Alt 4. Nov 2009, 20:36
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]
  Mit Zitat antworten Zitat