Bruno escribió:
Rodrigo,
Veo que te estás liando tu sólo. Vamos a ver... si creas un objeto de la clase 'hijo' y en el método 'create' de esta clase llamas a 'Super:Create()' subes un nivel en la jerarquía y al entrar en el método 'Create' del padre llamas a 'Metodo01' automáticamente desciendes en la jerarquía hasta 'hijo' porque lo has sobreescrito, por eso ves el primer mensaje, luego al volver a pasar en el método 'Create' del hijo por 'Metodo01'' te vuelve a salir el mensaje.
Resumiendo, si sobreescribes un método siempre que se llame en cualquier nivel de la jerarquía descenderá hasta el nivel del objeto para ejecutarlo, a menos que uses 'Super', que es precisamente para indicar que queremos que suba. En tu caso debes poner un Super:Metodo01() en el propio método 'Metodo01' del hijo si quires que se llegue a ejecutar el del padre.
Revisa esto muy, muy despacio, puede llegar a confundir.
-------------------------------------------------------------------
mmmmm....

debo reconocer que en esto de clases, tengo poco dominio...
Te dire... que no tenia idea para que era aquello de "Super:". Como aquella "palabra", salia en forma reiterativa en la antigua GUI, solo me dedique a copiar sin saber el sentido de dicha sentencia... En ausencia de documentacion... solo queda.. "prueba y error"...
Pues bien, te planteo mi objetivo...
- Deseo heredar desde TPadre, un nuevo objeto que se llamara THijo...
- THijo debe sobreescribir totalmente, varios metodos de TPadre.
- Entre lo metodos a sobreescribir, esta el metodo "Create".
- No deseo hacerme lios, con el asunto de "subir o bajar" en aquello de la jerarquia...
Luego la pregunta...
¿Como THijo, sobrescribe el metodo Create() de TPadre?
--------------------------------------------------------------------
Mira, te aconsejo que SIEMPRE llames al create de TPadre, ya que se puede dar el caso (MUYYYY PROBABLE), que no conozcas toda la información de lo que inicializa el método constructor, por lo que, AUNQUE tu añadas o modifiques datas LLAMA SIEMPRE PRIMERO al create del padre y despues modifica lo que quieras ¿Ok?
Pues bien, deduzco de tus palabras, que culpa de la situacion que describo, esta en el incorporar, en THijo, la siguiente linea que destaco...
//----------------------------------------------------
Method Create( oParent ) Class THijo
Super:Create( oParent )
<--- ESTA LINEA.... // Configuracion general del control ---.
::SetSize( 500, 350)
::TabStop := .T.
::Brush:Color := clWhite
// Metodo solo de prueba ---------------
::Metodo01()
Return Self
Luego...
- ¿Debo quitar dicha linea, asi evito el subir en la jerarquia?
Si quito la linea en cuestion.... me arroja error....
"Error de Proteccion General
- Llamado desde THIJO:BRUSH( 0)....."
Este error SEGURO que es porque no inicializas correctamente el padre. Llama a Super:Create().
De hecho... NO QUIERO subir en la jerarquia, quiero reemplazar o sobreescribir completamente el metodo create de TPadre...
mmmmm.... a ver... lo coloco mas facil...
INSISTO INICIALIZA el padre.
Pregunta....
- ¿THijo, puede sobreescribir el metodo Create de TPadre?
Claro, el create de THijo es el METODO QUE SE EJECUTA, y de ti depende lo que hagas en él.
Si asi fuese....
- ¿Como es que... THijo debe sobreescribr dicho metodo ?
Si como dices añades o quieres modificar datas, este es el lugar.
Ahora ¿Por que deseo sobreescribir el metodo Create de TPadre?
Por que el THijo, incorporara otras datas, otros caculos, en fin... varias otras cosas que no tiene TPadre dentro del metodo en cuestion...
Ya te conteste.
Bueno eso...

Saludos
Rodrigo Soto
Santiago - Chile