Leitura recomendada
Objetivos
Herança
O conceito de herança em POO permite que uma classe filha tenha acesso aos recursos
da classe pai e também possa estendê-la.
Exemplo 1
local pai= {} --table
--construtor público
pai.construtor = function()
local classe = {}
classe.MinhaPropriedade = 999 --public
function classe.MetodoClasseBase()
print("MinhaClasse.MetodoClasseBase")
end
return classe
end
Saída
-
Vamos simular herança instanciando uma classe pai dentro de uma classe filha para assim ter
acesso aos métodos e atributos da classe pai.
Exemplo 2
local filha= {}
filha.construtor = function()
local pai= MinhaClasse.construtor()
return pai
end
O uso da classe derivada para acessar os métodos e atributos da classe pai é mostrado no
exemplo abaixo:
Exemplo 2
local pai = {} --table
--construtor público
pai.construtor = function()
local classe = {}
classe.PropriedadePai = 999 --public
function classe.MetodoPai()
print("pai.MetodoPai")
end
return classe
end
local filha = {}
filha.construtor = function()
local pai = pai.construtor()
return pai
end
--instância
local objeto = filha.construtor()
objeto.MetodoPai()
print(objeto.PropriedadePai);
Saída
pai.MetodoPai
999
Método construtor classe pai
Em algumas situações é necessário iniciar uma classe pai com valores. Para tal, criamos um
construtor parametrizado nessa classe:
Exemplo 3
local pai = {} --table
--construtor público
pai.construtor = function(valor)
local classe = {}
classe.PropriedadePai = valor --public
function classe.MetodoPai()
print("pai.MetodoPai")
end
return classe
end
Saída
pai.MetodoPai
888
A classe filha agora pode informar os valores como argumento para o construtor ao instanciar
a classe pai.
Sintaxe
local filha = {}
filha.construtor = function() --parametros classe filha omitidos
local pai = pai.construtor(888)
return pai
end
O uso da classe derivada para acessar os métodos e atributos da classe pai, usando o que
foi discutido neste tópico, é mostrado no exemplo abaixo:
Exemplo 4
local pai = {} --table
--construtor publico
pai.construtor = function(valor)
local classe = {}
classe.PropriedadePai = valor --public
function classe.MetodoPai()
print("pai.MetodoPai")
end
return classe
end
local filha = {}
filha.construtor = function()
local pai = pai.construtor(888)
return pai
end
--instancia
local objeto = filha.construtor()
objeto.MetodoPai()
print(objeto.PropriedadePai);
Saída
pai.MetodoPai
888
De forma semelhante ao que foi visto acima, podemos acessar os métodos get/set de uma classe
pai a partir de sua classe filha. O termo this utilizado no exemplos faz referência
à própria classe.
Exemplo 5
--classe pai
local pai= {} --table
--construtor público
pai.construtor = function() --
local this = {}
local propriedadePai = 999 --private
function this.MetodoPai()
print("pai","MetodoPai")
end
this.GetPropriedadePai = function()
return propriedadePai
end
this.SetPropriedadePai = function(valor)
propriedadePai = valor
end
return this
end
--classe filha
local filha= {}
filha.construtor = function()
local this = pai.construtor() --construtor pai
this.MetodoFilha = function()
print(this.propriedadePai) --nil
print(this.GetPropriedadePai())
this.SetPropriedadePai(888)
print(this.GetPropriedadePai())
end
return this
end
--instância
local objeto = filha.construtor(888) --construtor
objeto.MetodoFilha()
Saída
999
A sobrescrita de métodos em O.O permite que um mesmo método tenha diferentes implementações.
Para simular essa sobrescrita, vamos definir um método para sobrescrever em uma classe pai:
Exemplo 6
local pai= {} --table
--construtor publico
pai.construtor = function()
local this = {}
function this.Sobrescrever() -- override
print("Metodo pai")
end
return this
end
O uso dos métodos sobrescrita na classe pai é mostrado no código completo abaixo:
Exemplo 7
local pai= {} --table
--construtor publico
pai.construtor = function() --construtor
local this = {}
function this.Sobrescrever() -- override
print("Método pai")
end
return this
end
local filha= {}
filha.construtor = function()
local pai= pai.construtor() --construtor base
local metodoBase = pai.Sobrescrever --cópia se necessário
function pai.Sobrescrever() --sobrescrita
print("Método filha");
end
return pai
end
local _pai = pai.construtor()
local _filha = filha.construtor()
_filha.Sobrescrever()
_pai.Sobrescrever()
Saída
Método filha
Método pai
Histórico de atualizações
- 14/06/2025 - versão inicial
Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.