O que é Polimorfismo?
Parte da seção Programação Orientada a Objetos do Journey de JavaScript da Coddy — lição 35 de 56.
O polimorfismo é um princípio fundamental da programação orientada a objetos que permite que objetos de diferentes classes respondam ao mesmo método de diferentes maneiras.
Em JavaScript, o polimorfismo é mais comumente visto quando classes filhas sobrescrevem métodos de classes pai.
Vamos criar uma classe pai simples com um método speak():
class Animal {
constructor(name) {
this.name = name;
}
speak() {
return `${this.name} makes a sound`;
}
}Agora, vamos criar uma classe filha que estende Animal:
class Dog extends Animal {
speak() {
return `${this.name} barks`;
}
}Aqui está outra classe filha:
class Cat extends Animal {
speak() {
return `${this.name} meows`;
}
}Cada classe filha implementa o método speak() de forma diferente. Isso é polimorfismo em ação!
Agora podemos criar diferentes objetos e chamar o mesmo método em cada um:
const animal = new Animal("Some animal");
const dog = new Dog("Rex");
const cat = new Cat("Whiskers");
console.log(animal.speak()); // Some animal faz um som
console.log(dog.speak()); // Rex late
console.log(cat.speak()); // Whiskers miaTodos os três objetos respondem ao método speak(), mas cada um o faz de sua própria maneira.
Desafio
Você tem um sistema de notificação com uma classe pai Notification e duas classes filhas. Sua tarefa é adicionar o método send(message) a cada classe filha com implementações diferentes.
- Na classe
EmailNotification, o método deve retornar a string: "Sending '(message)' via Email" - Na classe
SMSNotification, o método deve retornar a string: "Sending '(message)' via SMS"
Folha de consulta
O polimorfismo permite que objetos de diferentes classes respondam ao mesmo método de maneiras diferentes. No JavaScript, isso é comumente alcançado quando as classes filhas sobrescrevem métodos das classes pais.
Crie uma classe pai com um método:
class Animal {
constructor(name) {
this.name = name;
}
speak() {
return `${this.name} makes a sound`;
}
}As classes filhas podem sobrescrever o método pai com sua própria implementação:
class Dog extends Animal {
speak() {
return `${this.name} barks`;
}
}
class Cat extends Animal {
speak() {
return `${this.name} meows`;
}
}Cada objeto responde ao mesmo método de forma diferente:
const animal = new Animal("Some animal");
const dog = new Dog("Rex");
const cat = new Cat("Whiskers");
console.log(animal.speak()); // Algum animal faz um som
console.log(dog.speak()); // Rex late
console.log(cat.speak()); // Whiskers miaExperimente você mesmo
import { EmailNotification } from './email-notification.js';
import { SMSNotification } from './sms-notification.js';
// Código de teste - não modifique
const email = new EmailNotification();
const sms = new SMSNotification();
console.log(email.send("Hello!")); // Deve usar o send() do EmailNotification
console.log(sms.send("Hello!")); // Deve usar o send() do SMSNotificationEsta 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