Heranca em TLPP (OO inheritance)
Heranca de classes em TLPP. Sintaxe limpa similar a Java/C#. Filha herda data e methods, pode sobrescrever (override) e chamar super.
Assinatura: class Filha from Pai
Retorna: construct
TLPP suporta heranca classica de OO. Sintaxe usando from (em vez do class Base FROM do AdvPL antigo).
Classe base + filha
#include 'tlpp-core.th'
class Animal
public data nome as character
public method new(cNome as character) as object
public method falar() as character
endclass
method new(cNome) class Animal
::nome := cNome
return self
method falar() class Animal
return 'Som generico'
// ==================
class Cao from Animal
public data raca as character
public method new(cNome as character, cRaca as character) as object
public method falar() as character // override
endclass
method new(cNome, cRaca) class Cao
_Super:new(cNome) // chama construtor do pai
::raca := cRaca
return self
method falar() class Cao
return 'Au au!'Uso
local oRex as object
oRex := Cao():new('Rex', 'Labrador')
conout(oRex:nome) // Rex (herdado de Animal)
conout(oRex:raca) // Labrador
conout(oRex:falar()) // Au au! (override)Chamar metodo do pai (super)
Use _Super:nomeMetodo() dentro do override:
method falar() class Cao
local cSomBase := _Super:falar()
return cSomBase + ' (mas com latido)'Pegadinhas
- Heranca multipla nao suportada — so 1 pai. Pra comportamento similar, use composicao
- Visibilidade:
privateda classe pai NAO e acessivel pela filha. Useprotected - Construtor: filha precisa chamar
_Super:new()explicito — nao e automatico
Exemplos
Override de metodo
method falar() class Cao
return 'Au au!'