Metodos heredados de una clase

Metodos heredados de una clase

Postby miarcod » Fri Oct 21, 2005 11:18 pm

¿Como puedo acceder al método padre de una clase cuando se encuentra redefinido?
Hace tiempo leí algo al respecto, pero por más que busco no lo encuentro.

Por ejemplo

Code: Select all  Expand view  RUN
      CLASS UNO
             METHOD nombre()  INLINE "ESUNO"
          END CLASS

         CLASS DOS FROM UNO
            METHOD nombre()  INLINE "ESDOS"
         ENDCLASS

         CLASS TRES FROM DOS
            METHOD nombre()   INLINE "ESTRES"
        ENDCLASS


Si en mi función main() creo un objeto O1 de la clase TRES y ejecuto el método nombre() obtengo ESTRES,

Como obtengo el "ESDOS" y el "ESUNO"
miarcod
 
Posts: 199
Joined: Tue Oct 11, 2005 2:17 pm

Re: Metodos heredados de una clase

Postby Hernan Diego Ceccarelli » Sat Oct 22, 2005 12:03 am

miarcod wrote:¿Como puedo acceder al método padre de una clase cuando se encuentra redefinido?
Hace tiempo leí algo al respecto, pero por más que busco no lo encuentro.

Por ejemplo

Code: Select all  Expand view  RUN
      CLASS UNO
             METHOD nombre()  INLINE "ESUNO"
          END CLASS

         CLASS DOS FROM UNO
            METHOD nombre()  INLINE "ESDOS"
         ENDCLASS

         CLASS TRES FROM DOS
            METHOD nombre()   INLINE "ESTRES"
        ENDCLASS


Si en mi función main() creo un objeto O1 de la clase TRES y ejecuto el método nombre() obtengo ESTRES,

Como obtengo el "ESDOS" y el "ESUNO"


Caso de Herancia Simple:
Super:<Metodo> --> Metodo del Padre :-)

Super proviene de SUPERTIPO, En objetos las jerarquías se habla de subtipo o especialización de un supertipo o generalización. . Los subtipos (niveles inferiores de la jerarquía) heredan las características de sus supertipos, además, cada instancia de un tipo de objeto lo es también de sus supertipos.

Caso de Herencia Multiple:
Super devolvera el objeto primero, aunque la clase que hereda a uno o mas objetos tiene variables de instancia o exportadas cuyos nombres son los de la clase que se pretende heredar. Esto es aplicable a Objects y el motor de Objetos de Harbour.


Salu2
Hernan :)
User avatar
Hernan Diego Ceccarelli
 
Posts: 84
Joined: Fri Oct 07, 2005 4:51 pm
Location: Rosario - Santa Fe - Argentina

Postby jlcapel » Sun Oct 23, 2005 6:39 pm

Hola Hernán, Miarcod,

Utilizando el motor de objetos de (x)Harbour, según veo en el código de Miarcod, si hacemos super:Nombre() devolverá "ESDOS" por que el padre de la clase TRES es DOS.

A nivel PRG, si lo que interesa es acceder a la clase 'padre' de una jerarquía de clases debería hacerse de una forma parecida a esta:

Code: Select all  Expand view  RUN
CLASS UNO
         METHOD nombre()  INLINE "ESUNO"
END CLASS

CLASS DOS FROM UNO
           METHOD nombre()  Super:Nombre()
ENDCLASS

CLASS TRES FROM DOS
           METHOD nombre()   Super:Nombre()
ENDCLASS


Con esto te aseguras siempre que la llamada al método Nombre dará como resultado el que hay en la case padre.

Saludos,
José Luis Capel
User avatar
jlcapel
 
Posts: 229
Joined: Wed Oct 12, 2005 5:32 pm
Location: Valencia - España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 63 guests