#include "tlpp-core.th"
namespace test.tlpp.example.polymorphism
Class A
public method New()
// Eu vou responder com o nome da classe que está instanciada
public method instanceOf() as character
// E eu vou perguntar de quem é a instância
public method whoami() as character
EndClass
Class B from A
public method New()
public method whoami() as character
EndClass
Class C from B
public method New()
public method whoami() as character
EndClass
// Os construtores A, B, C
// ---------------------------------------------------
method new() class A
Return self
method new() class B
Return self
method new() class C
Return self
// O instanceOf, somente implementado em A
// ---------------------------------------------------
method instanceof() class A
Local cWho := ::whoami() // quem vai ser chamado ?
Return cWho
// Os três whoami, cada um com o seu comportamento
// ---------------------------------------------------
method whoami() class A
Return "class A"
method whoami() class B
Return "class B"
method whoami() class C
Return "class C"
// Quando for testar, me chame assim: test.tlpp.example.polymorphism.u_test01()
// --------------------------------------------------------------------------------
Function u_test01()
Local objA, objB, objC as Object
// Um objeto de cada classe
objA := A():New()
objB := B():New()
objC := C():New()
// Vamos ver as respostas polimórficas?
Conout(objA:instanceOf()) // A resposta será 'class A'
Conout(objB:instanceOf()) // A resposta será 'class B'
Conout(objC:instanceOf()) // A resposta será 'class C'
/** Lembre-se que o segredo está na função polimórfica whoami **/
Return .T.
|