Page 1 of 1
Metodos heredados de una clase
Posted: Fri Oct 21, 2005 11:18 pm
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"
Re: Metodos heredados de una clase
Posted: Sat Oct 22, 2005 12:03 am
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
Posted: Sun Oct 23, 2005 6:39 pm
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