Hola compañero:
Miles de pistas! Estás heredando pero después pasas de la herencia!
Es que estás mezclando el código, y el resultado que te da es el lógico.
1) Si haces un método y le pones un parámetro, OBVIAMENTE cuando hagas referencia a ese parámetro y no lo hayas pasado te dará un error.
2) La declaracion
está creando un objeto nuevo, encima del que ya había en Self, que se pierde al salir del método. Mira el código pre procesado para que te des una idea de que es lo que te digo.
Si pones justo debajo un ? Self:Classname(), verás que te imprime 'TPRINTER', no 'TUCLASE', porque con el comando te cargaste la variable self original, creaste un objeto nuevo y lo pusiste encima.
Averigua un poco más sobre herencia y como se usa el mensaje SUPER, es lo que te hace falta.
3) Respecto de
Code: Select all
METHOD Head(oPrn) CLASS TRptConc
oPrn:cmSay( 3.0,9.0, "testtttt".... )
::cmSay( 3.0,9.0, "testtttt".... ) //se supone que esta linea deberia tener el mismo efecto que la anterior... pq no es asi,???
Return Self
Como te decia en 2, creas un objeto print que tendra vida dentro del método donde lo creaste, pero se destruirá al salir, y que es diferente del objeto SELF real. El oPrn:ClassName() == 'TPRINTER', y Self:ClassName() == 'TUCLASE'.
De todas maneras FW no está preparada para usar herencia de manera sencilla, porque tiene comandos que usan las clases y no hay lugar donde inyectar el código de tus clases. Lo que te sucede es un claro síntoma de esto. Hace un tiempo que puse algunos trucos para poder usar herencia, pero no es tan simple.
Un saludo,
Carlos