Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Vererbung: Feld trotz private Dekl. in abgeleiteter Klasse? (https://www.delphipraxis.net/30514-vererbung-feld-trotz-private-dekl-abgeleiteter-klasse.html)

xineohp 25. Sep 2004 23:12


Vererbung: Feld trotz private Dekl. in abgeleiteter Klasse?
 
moin,

ich habe eine Klasse in der ein Feld als private deklariert ist, nun möchte ich aber aus einer abgeleiteten Klasse auf dieses Feld zugreifen, was so natürlich nicht geht. Kann ich das Feld in meiner abgeleiteten Klasse einfach nochmal deklarieren? oder wie kann ich das Problem sonst lösen ohne die Basisklasse zu verändern?

nailor 26. Sep 2004 00:06

Re: Vererbung: Feld trotz private Dekl. in abgeleiteter Klas
 
einfach mal deinen kommentar ignorier:

am einfachsten wäre es wirklich, die sache auf protected zu setzen!!! ob es sowas wie reintruduce auch für variablen gibt, weiß ich nicht.

Hansa 26. Sep 2004 00:23

Re: Vererbung: Feld trotz private Dekl. in abgeleiteter Klas
 
wahrscheinlich mußt du gleich "public" verwenden. Außerdem besteht ein Unterschied zwischen Lesen und schreiben.

Robert_G 26. Sep 2004 00:45

Re: Vererbung: Feld trotz private Dekl. in abgeleiteter Klas
 
Zitat:

Zitat von Hansa
wahrscheinlich mußt du gleich "public" verwenden. Außerdem besteht ein Unterschied zwischen Lesen und schreiben.

:shock: Warum das denn?
@Topic
Die Unterscheidung zwischen private oder protected ist eine reine Designfrage.
Wenn du es für inkonsistent ansiehst, dass ein Nachfahre diesen Wert ändert -> private, ansonsten halt protected. ;)
Wählst du private, kannst du den Wert zum Bleistift über den Constructor setzen.
kleines Bsp.
Delphi-Quellcode:
program Miep;

{$APPTYPE CONSOLE}

type
  Base = class
  private fName :string;
  public
    property Name :string read fName;
    constructor Create(const pName :string);
  end;
type
  Person = class(Base)
  private fVorname :string;
  public
    property Vorname :string read fVorname;
    constructor Create(const pName, pVorname :string);
  end;

constructor Base.Create(const pName :string);
begin
  inherited Create();
  fName := pName;
end;

constructor Person.Create(const pName, pVorname :string);
begin
  inherited Create(pName);
  fVorname := pVorname;
end;

var
  testPerson                 :Person;
  SenselessVar               :string;
begin
  testPerson := Person.Create('Schulz', 'Hans');

  Writeln(testPerson.Name, ','#32, testPerson.Vorname);

  Writeln('Zum Beenden bitte den Any-Key suchen... :P');
  // frag's Pferd wie man eigentlich auf eine Eingabe wartet :gruebel:
  Read(SenselessVar);
end.

xineohp 26. Sep 2004 11:08

Re: Vererbung: Feld trotz private Dekl. in abgeleiteter Klas
 
Danke für die Antworten, aber: Problem nicht gelöst!

Ich kann/will die Basisklasse nicht änderen, da es sich um eine Kompo von Borland handelt und ich nicht gerne in Qriginalquelltexten rumpfusche.

Andererseíts ist das Problem wohl auch so nicht lösbar. Es wäre ja auch irgendwie widersinnig wenn man eine private Deklaration so einfach umgehen kann ... private existert ja gerade damit man nicht drauf zu greifen kann. :roll:

Ich werd wohl um das Problem zu umgehen in der Hirachie einen Schritt nach oben gehen, wo besagtes Feld noch nicht (als private) deklariert ist. Ist zwar mühsam, geht aber wohl nicht anders und außerdem gibt es ja noch copy&paste :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz