Herdando propriedades e métodos
Parte da seção Programação Orientada a Objetos do Journey de JavaScript da Coddy — lição 28 de 56.
Quando uma classe estende outra classe, ela herda todas as propriedades e métodos da classe pai. Isso significa que as classes filhas têm acesso automático a tudo o que foi definido na classe pai.
Vamos criar uma classe pai com propriedades e métodos:
class Animal {
constructor(name, age) {
this.name = name;
this.age = age;
}
eat() {
return `${this.name} is eating`;
}
sleep() {
return `${this.name} is sleeping`;
}
}Agora, vamos criar uma classe filha que herda de Animal:
class Dog extends Animal {
constructor(name, age, breed) {
super(name, age);
this.breed = breed;
}
}Crie uma instância da classe Dog:
const rex = new Dog("Rex", 3, "German Shepherd");Agora, embora não tenhamos definido eat() e sleep() na classe Dog, ainda podemos usar esses métodos:
console.log(rex.eat()); // Saída: Rex is eating
console.log(rex.sleep()); // Saída: Rex is sleepingE podemos acessar todas as propriedades herdadas:
console.log(rex.name); // Saída: Rex
console.log(rex.age); // Saída: 3
console.log(rex.breed); // Saída: German ShepherdDesafio
Crie uma classe Cake que estenda Dessert e exporte-a. O Cake deve ter:
- Todas as propriedades e métodos herdados de Dessert
- Uma nova propriedade
flavor - Um novo método
addCandles()que retorna uma string “Added candles to ${this.name}!”
Folha de consulta
Classes filhas herdam todas as propriedades e métodos de sua classe pai usando a palavra-chave extends:
class Animal {
constructor(name, age) {
this.name = name;
this.age = age;
}
eat() {
return `${this.name} is eating`;
}
sleep() {
return `${this.name} is sleeping`;
}
}
class Dog extends Animal {
constructor(name, age, breed) {
super(name, age);
this.breed = breed;
}
}
const rex = new Dog("Rex", 3, "German Shepherd");
console.log(rex.eat()); // Rex is eating
console.log(rex.name); // Rex
console.log(rex.breed); // German ShepherdA classe filha pode acessar todas as propriedades e métodos herdados sem redefini-los.
Experimente você mesmo
import { Dessert } from './desserts.js';
import { Cake } from './desserts.js';
// Código de teste - não modifique
const myCake = new Cake("Birthday Cake", 300, "Chocolate");
console.log(myCake.describe()); // Deve exibir "Birthday Cake has 300 calories"
console.log(myCake.flavor); // Deve exibir "Chocolate"
console.log(myCake.addCandles()); // Deve exibir "Added candles to Birthday Cake!"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