Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - private Variable: vererbbar???
michaelarban - Fr 16.04.10 13:21
Titel: private Variable: vererbbar???
hallo,
ich dachte immer, private Variablen seien nicht vererbbar an Unterklassen, die sich in anderen Units befinden:
ein ganz einfaches Beispiel zur Verdeutlichung
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| unit Oberklasse;
interface type TOberKlasse = class private Fpriv : Integer;
public function getPriv : Integer; procedure setPriv (pX : Integer); end;
implementation
function TOberKlasse.getPriv: Integer; begin result := Fpriv; end;
procedure TOberKlasse.setPriv(pX: Integer); begin Fpriv := pX; end;
end. |
so und jetzt eine abgeleitete Unterklasse, sie sich in einem ANDEREN Unit befindet:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| unit GanzandereUnit; interface uses Unitober;
type TUnterKlasse = class (TOberKlasse) public procedure setzen(y: Integer); end;
implementation
procedure TUnterKlasse.setzen(y: Integer); begin setPriv(y); end;
end. |
Danke für jede antwort
thepaine91 - Fr 16.04.10 13:24
Na Fpriv ?!
btw: mach vor den Quelltext [ delphi ] und dahinter [ /delphi ] ohne leerzeichen dazwischen
michaelarban - Fr 16.04.10 13:31
aber Fpriv ist doch als privat deklariert in der BasisKlasse und ist nur dort (bzw. in der ganzen Unit, in der sie deklariert worden ist) sichtbar, oder?
Gausi - Fr 16.04.10 13:32
Privat heißt, dass du auf die Eigenschaft von außen nicht direkt zugreifen kannst. Wenn du aber in einer öffentlichen (public) Methode der Klasse auf diese private interne Variable zugreifst, passiert das natürlich auch in den Klassen, die von deiner Basisklasse abgeleitet sind.
Dass sie nur in der Klasse/Unit sichtbar ist, heißt nicht, dass es sie woanders nicht gibt. ;-)
michaelarban - Fr 16.04.10 13:35
aber Fpriv ist doch als privat deklariert in der BasisKlasse und ist nur dort (bzw. in der ganzen Unit, in der sie deklariert worden ist) sichtbar, oder?
Gausi - Fr 16.04.10 13:43
Sie ist nur dort sichtbar, ja. Aber die Methode setPriv ist eine Methode dieser Basisklasse, und die sieht auch die privaten Variablen.
Beispiel: Du hast einen verschlossenen (privaten) Raum, für den du keinen Schlüssel hast. Du kannst selber nicht reingucken, was da drin ist, und kannst auch nichts reintun. Aber der Türsteher (SetPriv) am Eingang kann das. Und wenn du dem sagst "Pack das da rein", dann macht der das auch. Es sei denn, der Türsteher überprüft dein Zeug vorher, ob das auch in den Raum darf. Und genau dafür sind solche Setter und Getter da. ;-)
michaelarban - Fr 16.04.10 13:52
ok,
ich verstehe:
die private Variable der oberklasse wird zwar an die Unterklasse weitervererbt, aber sie ist nicht sichtbar (aber trotzdem noch vorhanden).
Gausi - Fr 16.04.10 13:55
Genau. Sonst wäre das ganze Konzept der Vererbung doch etwas unstabil, wenn immer nur die Fassade weitervererbt wird, und der Kern, an dem man von außen nicht rumfummeln soll, einfach verschwindet. ;-)
acadam71 - Fr 16.04.10 23:12
Noch einen Hinweis: Bitte KEINE "Pseudo-Setter" á la Java benutzen. In Delphi gibt es Properties! Das ist eleganter.
Gruß,
Andreas
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!