arrow_back Voltar ao curso

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.

js
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 Rex

O 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:

js
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 barulho

O 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
Comentários