Sobrescrevendo Métodos Herdados
Parte da seção Programação Orientada a Objetos do Journey de JavaScript da Coddy — lição 36 de 56.
A sobrescrita de método (method overriding) ocorre quando uma classe filha fornece sua própria implementação de um método que ela herdou de uma classe pai. A versão da classe filha "sobrescreve" (substitui) a versão da classe pai.
Exemplo Simples:
Crie uma classe pai com um método:
class Vehicle {
start() {
return "Vehicle starting...";
}
}Crie uma classe filha que estende a classe pai:
class Car extends Vehicle {
// Isso SOBRESCREVE o método start() de Vehicle
start() {
return "Car engine roaring to life!";
}
}Use as classes:
const vehicle = new Vehicle();
const car = new Car();
console.log(vehicle.start()); // "Vehicle starting..." (original)
console.log(car.start()); // "Car engine roaring to life!" (sobrescrito)Regras Principais para Sobrescrita:
- Mesmo nome de método que o pai
- Parâmetros iguais ou compatíveis
- A versão do filho é chamada em objetos filhos
- Sem necessidade de palavras-chave especiais - apenas defina o método
Desafio
Você recebeu uma classe pai Shape e uma classe filha Circle. A classe pai possui um método calculateArea() que retorna 0.
Sua tarefa é sobrescrever o método calculateArea() na classe Circle para calcular a área real de um círculo.
A fórmula para a área do círculo é: π × raio²
Em JavaScript: Math.PI * this.radius * this.radius
Folha de consulta
A sobrescrita de método (method overriding) ocorre quando uma classe filha fornece sua própria implementação de um método herdado de uma classe pai. A versão da filha substitui a versão da pai.
Exemplo:
class Vehicle {
start() {
return "Vehicle starting...";
}
}
class Car extends Vehicle {
// Sobrescreve o método start() de Vehicle
start() {
return "Car engine roaring to life!";
}
}
const vehicle = new Vehicle();
const car = new Car();
console.log(vehicle.start()); // "Vehicle starting..."
console.log(car.start()); // "Car engine roaring to life!"Regras Principais:
- Use o mesmo nome de método que o pai
- Use parâmetros iguais ou compatíveis
- A versão da filha é chamada em objetos da filha
- Nenhuma palavra-chave especial é necessária - basta definir o método na classe filha
Experimente você mesmo
import { Shape } from './shapes.js';
import { Circle } from './shapes.js';
// Teste sua implementação
const myCircle = new Circle(5);
console.log(myCircle.calculateArea());
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Objetos e a Palavra-chave this
Revisão Rápida: ObjetosAdicionando Métodos a ObjetosEntendendo a Palavra-chave thisFunções ConstrutorasA Palavra-chave newDesafio de Recapitulação7Herança e a palavra-chave extends
HerançaA relação "é um"A palavra-chave extendsO método super()Herdando propriedades e métodosDesafio de recapitulação10Polimorfismo
O que é Polimorfismo?Sobrescrevendo Métodos HerdadosUsando superDesafio de Recapitulação13Composição vs. Herança
A relação "tem um" vs. "é um"Os limites da herança profundaConstruindo objetos2Organizando o Código
O que são Módulos?Exportando com exportImportando com importExportações Default vs. Nomeadas5Encapsulamento e Acesso
EncapsulamentoCampos de Classe Públicos e PrivadosMétodos PrivadosDesafio de Recapitulação8Organizando Código POO
Organizar Classes em Módulos11Projeto: Um Renderizador de Formas
Configuração: Classe Shape e ExportaçãoHerança da Classe Circle14Sistema de Gerenciamento de Biblioteca
Projetando a BibliotecaClasse Livro com Composição