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 nicht über Units (https://www.delphipraxis.net/20801-vererbung-nicht-ueber-units.html)

skyphab 23. Apr 2004 14:22


Vererbung nicht über Units
 
Hallo zusammen!

Ich habe mich gewundert und gewundert, bis ich endlich draufgekommen bin:
Warum werden Attribute und Methoden einer Klasse nicht an eine Andere vererbt, wenn diese in einer anderen Unit steht?

Also als Beispiel:

Code:
Unit1.pas

type TKlasse1 = class
  private
    Zahl: integer;
end;
Code:
Unit2.pas

type TKlasse2 = class(TKlasse1)
  public
    procedure Test();
end;

procedure TKlasse2.Test();
begin
  Zahl := 1234;
end;
Die Eigenschaft Zahl gibts in TKlasse2 nicht. Funktioniert Vererbung nicht über unterschiedliche Units hinweg (Trotz Einbindung in uses im Interface)?
Muss ich jetzt alle Klasse in eine Unit packen, das wird ja furchtbar unübersichtlich? :(

mirage228 23. Apr 2004 14:27

Re: Vererbung nicht über Units
 
Deklarier Zahl nicht in private sondern in protected. damit sind variablen nur innerhalb der klasse und dessen nachfahren sichtbar. private variablen sind nur in der klasse und in klassen in der selben unit verfügbar bzw. sichtbar.

also in deinem falle:
Delphi-Quellcode:
type TKlasse1 = class
  protected
    Zahl: integer;
end;
mfG
mirage228

skyphab 23. Apr 2004 14:34

Re: Vererbung nicht über Units
 
Vielen Dank, es funktioniert :)

Jetzt verstehe ich auch wo bei Delphi der Unterschied zwischen Protected und Private gemacht wird :-D
Gottlob, doch keine einzelne Unit ;)

mirage228 23. Apr 2004 14:39

Re: Vererbung nicht über Units
 
Zitat:

Zitat von skyphab
Vielen Dank, es funktioniert

Bitte sehr ^^

Zitat:

Zitat von skyphab
Jetzt verstehe ich auch wo bei Delphi der Unterschied zwischen Protected und Private gemacht wird :-D Gottlob, doch keine einzelne Unit ;)

Hi,

private bedeutet eigentlich, dass nur diese Klasse zugriff auf die Variablen dort drin hat. In Delphi ist es aber so, dass alle Klassen in der selben(!) Unit auf diese Variable zugreifen können. In Delphi8 für .NET gibt es strict private, wo die Variablen auch wirklich 100% privat sind.
protected macht die Variable auch für alle Nachfahren einer Klasse "offiziell" verfügbar.

mfG
mirage228

skyphab 23. Apr 2004 14:46

Re: Vererbung nicht über Units
 
Zitat:

Zitat von mirage228
private bedeutet eigentlich, dass nur diese Klasse zugriff auf die Variablen dort drin hat. In Delphi ist es aber so, dass alle Klassen in der selben(!) Unit auf diese Variable zugreifen können. In Delphi8 für .NET gibt es strict private, wo die Variablen auch wirklich 100% privat sind.
protected macht die Variable auch für alle Nachfahren einer Klasse "offiziell" verfügbar.

Wirklich? Das mit den privaten Attributen habe ich ja noch nie probiert klingt aber unsauber ;)
Ich war immer der Meinung das geht nicht, weil es an sich auch nicht sein soll *g

Kann man dann bei protected die Attribute in der selben Unit aber anderen Klasse nicht mehr verwenden? Also wie es sein sollte?

maximov 23. Apr 2004 14:52

Re: Vererbung nicht über Units
 
Zitat:

Zitat von skyphab
...

Kann man dann bei protected die Attribute in der selben Unit aber anderen Klasse nicht mehr verwenden? Also wie es sein sollte?

Klassen in der selben unit sind quasi "freunde", die dürfen das (in delphi)!

Muetze1 23. Apr 2004 23:53

Re: Vererbung nicht über Units
 
Moin!

Jo, das stand sogar so auch mal irgendwo bei Borland: Klassen in der gleichen Unit sind automatisch friend Klassen. In C++ kann man das selber festlegen mit den Friend Class, aber in Delphi ist das direkt von der Unit abhängig...

MfG
Muetze1


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 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