Metodos heredados de una clase

Post Reply
miarcod
Posts: 172
Joined: Tue Oct 11, 2005 2:17 pm

Metodos heredados de una clase

Post by miarcod »

¿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

      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"
User avatar
Hernan Diego Ceccarelli
Posts: 84
Joined: Fri Oct 07, 2005 4:51 pm
Location: Rosario - Santa Fe - Argentina
Contact:

Re: Metodos heredados de una clase

Post by Hernan Diego Ceccarelli »

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

      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
jlcapel
Posts: 229
Joined: Wed Oct 12, 2005 5:32 pm
Location: Valencia - España
Contact:

Post by jlcapel »

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

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
Post Reply