herda — Herança e Polimorfismo
Fundamentos do XanaScript • Aula 16 de 20
Herança deixa uma classe reaproveitar e especializar outra. Com herda, uma classe filha ganha tudo da mãe e pode mudar o que precisar.
classe Animal {
spawna(nome) {
esse-cara.nome = nome
}
metodo falar() {
volta "faz barulho"
}
}
classe Cachorro herda Animal {
metodo falar() {
volta "Au au " + esse-cara.nome
}
}
cria rex = novo Cachorro("Rex")
grita-ae(rex.falar()) // Au au RexO que a herança dá de graça?
Cachorro herda o spawna do Animal — o spawna(nome) funcionou sem ser reescrito. Isso é o reuso: a lógica comum fica na mãe, cada filha só escreve o que é diferente.
Override — "eu faço do meu jeito"
A filha sobrescreve o método falar da mãe. Na hora de chamar, o XanaScript usa a versão mais específica (a do Cachorro). Chamar falar num Animal genérico dá "faz barulho"; num Cachorro, dá "Au au".
Polimorfismo — o superpoder da herança
Polimorfismo = "várias formas". Uma lista de Animal pode conter cachorros, gatos, pássaros — e cada um falar() do seu jeito, mesmo que o código não saiba qual é qual:
cria animais = [novo Cachorro("Rex"), novo Animal("Gato")]
repete-na-moral (cria i = 0; i < tamanho(animais); i++) {
grita-ae(animais[i].falar())
}
// Au au Rex
// faz barulhoO código chama falar() sem se preocupar com a classe concreta — cada instância decide seu comportamento.
Por que "herda" e não "implements"?
herda é herança clássica: uma relação "é um" (Cachorro é um Animal). Serve quando há reuso real de código e uma hierarquia natural. Use com moderação — hierarquias profundas viram complicação; muitas vezes composição (ter um objeto dentro de outro) resolve melhor.
Resumo
| Keyword | Função |
|---|---|
classe |
declara classe |
herda |
herança (extends) |
spawna |
construtor |
esse-cara |
this |
novo |
cria instância |
metodo |
método da classe |