TLPP - LANGUAGE
Objetos em TLPP podem utilizar métodos polimórficos.
Por definição, todos os métodos em TLPP são do tipo virtual.
Métodos redefinidos na classe filha tem a capacidade de mudar o comportamento da implementação feita na classe pai.
A redefinição é simples. Basta que a classe filha tenha um método com o mesmo nome que está na classe pai.
Nesse caso, quando o método é chamado em qualquer lugar da hierarquia de classes, ele assume o comportamento definido pelo objeto efetivamente instanciado.
Por definição, todos os métodos em TLPP são do tipo virtual.
Métodos redefinidos na classe filha tem a capacidade de mudar o comportamento da implementação feita na classe pai.
A redefinição é simples. Basta que a classe filha tenha um método com o mesmo nome que está na classe pai.
Nesse caso, quando o método é chamado em qualquer lugar da hierarquia de classes, ele assume o comportamento definido pelo objeto efetivamente instanciado.
polimorfismo.tlpp
#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.
Resultado do Exemplo
class Aclass Bclass C
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas