Autor |
Beitrag |
Bobby12345
Hält's aus hier
Beiträge: 2
|
Verfasst: 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
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Fr 21.09.07 19:20
Hallo und  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 
Hält's aus hier
Beiträge: 2
|
Verfasst: 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
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: 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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: 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
|
|
|