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

Exemplos

Override de metodo

method falar() class Cao
    return 'Au au!'

Veja também