| Autor |
Beitrag |
michaelarban
      
Beiträge: 34
|
Verfasst: Fr 16.04.10 13:21
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
Zuletzt bearbeitet von michaelarban am Fr 16.04.10 13:28, insgesamt 1-mal bearbeitet
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Fr 16.04.10 13:24
Na Fpriv ?!
btw: mach vor den Quelltext [ delphi ] und dahinter [ /delphi ] ohne leerzeichen dazwischen
|
|
michaelarban 
      
Beiträge: 34
|
Verfasst: 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
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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. 
_________________ We are, we were and will not be.
|
|
michaelarban 
      
Beiträge: 34
|
Verfasst: 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
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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. 
_________________ We are, we were and will not be.
|
|
CarstenB
      
Beiträge: 19
Win XP, Win 7, FreeBSD
Delphi 2007 Prof., VS 2003
|
Verfasst: Fr 16.04.10 13:46
Das Schlüsselwort "private" verhindert, dass du von ausserhalb die Variable verändern kannst, du rufst aber den Setter der Oberklasse auf - und der ist "public".
www.delphi-treff.de/...zugriff-auf-objekte/
|
|
michaelarban 
      
Beiträge: 34
|
Verfasst: 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
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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. 
_________________ We are, we were and will not be.
|
|
acadam71
      
Beiträge: 21
|
Verfasst: 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
|
|