Ich habe eine Frage zur Sichtbarkeit von Methoden bei der Vererbung.
Ich benutze Lazarus 0.9.28 win32 mit fpc 2.2.4
Wenn Klasse B von Klasse A abgeleitet ist, dann erbt Klasse B alle Daten von A mit den entsprechenden Sichtbarkeiten.
Wie kann man nun die Sichtbarkeit einzelner Methoden in der abgeleiteten Klasse verändern?
Mein erster Ansatz war eine Neudefinition der Methode mit anderer Sichtbarkeit und der Aufruf der inherited Methode.
Mein Minimal-Beispiel mit Sichtbarkeit von private nach public (Beispiel A):
Code: Alles auswählen
KlasseA = class
private
procedure Methode;
end;
procedure KlasseA.Methode;
begin
end;
KlasseB = class (KlasseA)
public
procedure Methode;
end;
procedure KlasseB.Methode;
begin
inherited Methode;
end;
Code: Alles auswählen
KlasseA = class
public
procedure Methode;
end;
KlasseB = class (KlasseA)
private
procedure Methode;
end;
Code: Alles auswählen
var MyObjekt: KlasseB;
MyObjekt := KlasseB.Create;
MyObjekt.Methode;
Der gleiche Aufruf bei Beispiel B sollte allerdings zu einem Fehler führen, weil Methode in Klasse B mit der Sichtbarkeit private überschrieben worden ist, oder?
Dem ist aber nicht so. Klasse B kennt trotzdem eine public Methode.....
Warum ist das so bzw. ist das ein Bug?
Vielen Dank für eure Antworten