Autor Beitrag
Bobby12345
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Fr 21.09.07 19:04 
Hallo,
Wie dem Titel schon zu entnehmen, ist meine Frage was der genaue unterschied zwischen protected und private in der OOP bei der Klassen erstellen in bezug auf Vererbung ist.

In Meinen Blättern steht folgendes:
Attribute die durch das Schlüsselwort private geschützt sind werden nicht an die Kindklassen weitervererbt. Gleichwohl kann man durch die ererbten Methoden der Elternklassen auf deren Attribute zugreifen. Will man die Attribute in den Kindklassen ändern, müssen die Attribute durch das SChlüsselwort Protected gekennzeichnet werden

Was ja nun nach meinem Verständnis bedeutet:
private -> wird nicht weitervererbt, durch die vererbten methoden in z.b. public kann man jedoch drauf zugreifen
protectet -> wird vererbt

Jedoch frage ich mich dann wie, wenn man z.b. Die Klasse TFahrzeug (Mit dem Attribut Farbe:String(private)) mit den beiden Kindklassen TFahrrad und TAuto hat.
Wie ist es dann möglich das TFahrrad Rot und TAuto Grün ist? Sie benutzen doch beide das eine Attribut der Eltern klasse, welches nur ein wert fassen kann, da es nuicht vererbt wurde.
Oder wird, sobald Objekte der Klassen Tauto und Tfahrrad erzeugt werden sozusagen eine kopie des attributs erzeugt obwohl es nicht vererbt wurde... aber wenn es so wäre wo ist dann der sinn von protected.

Ich hoffe ihr konntet mir folgen und könnt mir helfen.

mfg
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 21.09.07 19:20 
Hallo und :welcome: in der Entwickler-Ecke,

Ja, man kann es so ausdrücken, dass da eine Kopie erstellt wird. Besser ist es vielleicht so:

Die Klasse an sich stellt einen Bauplan dar. Also wie man im Speicher aus ein paar Bits und Bytes ein Fahrzeug baut. Wenn man nun eine Variable vom Typ TFahrzeug deklariert, wird mit dem Aufruf des Konstruktors der Bauplan aufgerufen, und das Fahrzeug wird gebaut.
Anschließend kann man natürlich noch ein anderes Fahrzeug bauen lassen - indem man z.B. eine weitere Variable nimmt. Und jedes Fahrzeug kann seine eigene Farbe erhalten.

_________________
We are, we were and will not be.
Bobby12345 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Fr 21.09.07 19:55 
ok vielen dank für die antwort, nur was bringt dann protected bzw für was brauch ich es?

kann es sein das ich, um beim obigen beispiel zu bleiben, z.b. das Attribut Farbe in protected setzten müsste wenn ich vorhabe die proceduren /functions, die das Attribut Farbe ändern oder damit arbeiten, zu überladen oder zu überschreiben?
HelgeLange
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: Fr 21.09.07 20:44 
durch protected kannst Du den Zugriff von aussen sperren, nur Kindklassen und die Klasse selbst kann drauf zugreifen. Und wenn eine Kindklasse es explizit erlauben will, brauch man nur die sichtbarkeit ändern und ein Protected - Attribut in Public oder Published legen

_________________
"Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 21.09.07 20:51 
Mit Protected kannst Du bei dem Auto festlegen, dass auf die Lackfarbe nur die Klasse selber zugreifen darf, damit sich das Auto selber zum Lackieren schicken kann ;-) Außerdem gestattet Protected, dass TMercedes der von TFahrzeug abgeleitet ist, auch Zugriff erhält, was bei Private nicht der Fall wäre.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
HelgeLange
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: Fr 21.09.07 21:14 
Das Problem ist nur, das TLackierer solange keinen Zugriff (nicht lackieren kann) hat, bis Du in einer Kindklasse eine Protected-Property public oder published gemacht hast...

_________________
"Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw