Methode von Parent Klasse verstecken..

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1629
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Methode von Parent Klasse verstecken..

Beitrag von corpsman »

Servus,

Ich befürchte ja, dass ihr mir sagt dass es nicht geht, aber fragen schadet ja nichts ;)

Worum es geht :

Code: Alles auswählen

 
Type 
  p = Class
  public
    Procedure A;
  end;
 
  c = Class(p)
  private
  public
  end;
 
var d:c;
 
begin
  d := c.create;
  d.a; // Es geht um diesen Aufruf
  ..
 
Gibt es eine Möglichkeit, in derer ich "A" in "C" so umdeklarieren kann, dass der Aufruf "d.a" einen Compilerfehler bringt, weil das nicht erlaubt ist ?

Oder anders gesagt.
Kann man mittels OOP in der Kindklasse Methoden der Vaterklasse "unsichtbar" machen ?
--
Just try it

wp_xyz
Beiträge: 5174
Registriert: Fr 8. Apr 2011, 09:01

Re: Methode von Parent Klasse verstecken..

Beitrag von wp_xyz »

Kann man mittels OOP in der Kindklasse Methoden der Vaterklasse "unsichtbar" machen ?
Meines Wissens nach geht das nicht (wobei ich nicht ausschließen will, dass Spezialisten irgendwelche unsauberen Hacks parat haben...)

Der saubere Weg wäre die Klassenhierarchie entsprechend aufzubauen:

Code: Alles auswählen

 
Type 
  customp = class
  end;
 
  p = Class(customp)
  public
    Procedure A;
  end;
 
  c = Class(customp)
  private
  public
  end;
 
var d:c;
 
begin
  d := c.create;
  d.a; // Geht jetzt nicht mehr!
  ..
 

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Methode von Parent Klasse verstecken..

Beitrag von Komoluna »

Das wird nicht funktionieren, da du immer

Code: Alles auswählen

p(d).A;
aufrufen kannst.

Edit: Warum willst du überhaupt eine Methode verstecken?
Kannst du nicht einfach die Methode in der Childclass überschreiben?

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Methode von Parent Klasse verstecken..

Beitrag von theo »

Ich glaube wp_xyz hat recht.
Man kann die Methode natürlich auch "überpinseln". Kommt halt auf den Zweck an.

Code: Alles auswählen

  c = Class(p)
  private
  public
   Procedure A;
  end;
 
.............
 
procedure c.A;
begin
  raise Exception.Create('Bang!');
end;    

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1629
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Methode von Parent Klasse verstecken..

Beitrag von corpsman »

Meine Klasse schreibt daten an die Uart.

Nun hängt an der Uart aber ein µC, welcher die Daten nach I2C umsetzt. Die Vater klasse stellt mir die Routinen zur Kommunikation mittels der Uart bereit (WriteByte, ReadByte..)

Im I2C muss man das allerdings anders machen, da gibt es z.B. ReadRegister und WriteRegister ..

Die Kind Klasse bastelt diese Funktion über diverse WriteByte und ReadByte Aufrufe zusammen. Durch die Elterneigenschaft, sind nun aber Write und ReadByte Sichtbar.

Ich denke der Saubere Weg hier wird sein, wenn ich meine Klasse von TObject ableite und mir die Elternklasse als Instanz in die Klasse hohle. Alle unverändert genutzten Funktionen der Elternklasse kann ich ja via getter und setter bereitstellen ..
--
Just try it

Antworten