Ich würde sagen, beides ist eng miteinander verknüpft, ich bin kein Experte was solche Definitionen angeht, also nagel mich bitte nicht darauf fest, ich kann dir nur sagen, wie ich diese Bezeichnungen auffassen würde.
Vererbung ist es, wenn ich eine Klasse von einer anderen ableite, um neue Funktionen hinzuzufügen, also die Klasse zu erweitern. Polymorphie ist es, wenn ich die Basisklasse eigentlich als Schnittstelle verwende, um auf diese abgeleiteten Klassen zuzugreifen. Ich könnte z.b. die Klasse TFahrzeug mit der Methode "Fahre" deklarieren, dann TAuto und TFahrrad davon ableiten und erst in diesen Klassen die Methode implementieren (bzw. überschreiben). Weil beide den gleichen Vorfahren haben, brauche ich nicht zu wissen, um was es sich bei einem x-beliebigen Fahrzeug handelt, und kann trotzdem "Fahre" aufrufen. IMO einer der größten Vortteile von
OOP.
Delphi-Quellcode:
interface
types
TFahrzeug = class
procedure Fahre; virtual; // virtual ist hier wichtig, erzwingt "Späte Bindung", was für's Überschreiben notwendig ist
end;
// Vererbung: (hier wird allerdings nur eine leere Methode geerbt)
TAuto = class(TFahrzeug)
procedure Fahre; override;
end;
TFahrrad = class(TFahrzeug)
procedure Fahre; override;
end;
implementation
procedure TFahrzeug.Fahre; // wenn man sowas vermeiden will soltle man natürlich abstract benutzen
begin
end;
procedure TAuto.Fahre;
begin
ShowMessage('Ich bin ein Auto');
end;
procedure TFahrrad.Fahre;
begin
ShowMessage('Ich bin ein Fahrrad');
end;
// Polymorphie:
var
UnbekanntesFahrObjekt: TFahrzeug;
begin
UnbekanntesFahrObjekt := TAuto.Create:
UnbekanntesFahrObjekt.Fahre;
UnbekanntesFahrObjekt.Free;
UnbekanntesFahrObjekt := TFahrrad.Create:
UnbekanntesFahrObjekt.Fahre;
UnbekanntesFahrObjekt.Free;
end