AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi OO Frage: Warum kann Unterklasse Var-Typ ändern?
Thema durchsuchen
Ansicht
Themen-Optionen

OO Frage: Warum kann Unterklasse Var-Typ ändern?

Ein Thema von Ares · begonnen am 10. Okt 2007 · letzter Beitrag vom 10. Okt 2007
Antwort Antwort
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#1

OO Frage: Warum kann Unterklasse Var-Typ ändern?

  Alt 10. Okt 2007, 14:05
Hallo!

Ich arbeite mich gerade etwas in die Objektorientierung ein und bin meinen Versuchen darauf gestoßen, dass folgendes möglich ist:

Delphi-Quellcode:
  TClass1 = class(TObject)
  private
    FTest: boolean;
  public
    constructor Create; virtual;
    property Test: boolean read FTest write FTest;
  end;

  TClass2 = class(TClass1)
  private
    FTest: string;
  public
    constructor Create; virtual;
    property Test: string read FTest write FTest;
  end;
Class2 ist also eine Unterklasse von Class1 und überschreibt den Datentyp des Feldes FTest sowie der zugehörigen Eigenschaft Test von boolean zu string.

Damit ist Class2 doch eigentlich keine Unterklasse von Class1 mehr, denn man kann ein Class1-Objekt nicht durch ein Class2-Objekt ersetzen. z.B. Hier:

Delphi-Quellcode:
var c1: TClass1;
    c2: TClass2;
begin
  c1 := TClass1.Create;
  c2 := TClass2.Create;

  c1.Test := true;
  c2.Test := 'test';

  if c1.Test then showMessage('Wahr')
    else showMessage('Falsch');
  if c2.Test then showMessage('Wahr') // kann nicht compiliert werden, da Test kein Boolean
    else showMessage('Falsch');
  
  c1 := c2;
  if c1.Test then showMessage('Wahr') // Liefer falsch
    else showMessage('Falsch');
end;
Man kann c2 also nicht im gleichen Coder verwenden wie c1 (in der If-Abfrage). Trotzdem kann man c1 c2 zuweisen...

Wäre es nicht "objektorientiert", wenn man den Typ eines Feldes in einer Unterklasse nicht ändern könnte? Bzw nur FTest: TTest1 durch FTest: TTest2 überschreiben kann wenn TTest2 eine Unterklasse von TTest1 ist?

Vielen Dank für eure Meinung hierzu!
Ares
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: OO Frage: Warum kann Unterklasse Var-Typ ändern?

  Alt 10. Okt 2007, 14:08
Das Feld wird nur verdeckt. Du kannst nämlich schreiben:
Delphi-Quellcode:
if TClass1(c2).Test then showMessage('Wahr')
    else showMessage('Falsch');
Du hast in TClass2 also zwei gerschiedene Variablen mit dem gleichen Namen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: OO Frage: Warum kann Unterklasse Var-Typ ändern?

  Alt 10. Okt 2007, 15:02
Ich stimme Ares zu, solche Fehlerquellen sollte eine Sprache eigentlich nicht erlauben.

edit: I spel gud
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#4

Re: OO Frage: Warum kann Unterklasse Var-Typ ändern?

  Alt 10. Okt 2007, 15:08
Zitat:
Ich stimme Ares zu, solche Fehlerquellen sollte ein Sprache eigentlich nicht erlauben.
Einige jüngere Compiler (für andere Sprachen) geben in so einem Fall eine Warnung aus. Eigentlich wundert mich fast, dass der Delphi-Compiler das nicht auch macht.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz