image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image
Luiz Coutinho
Luiz Coutinho04/08/2024 12:15
Compartilhe

Diferença entre extends e implements em TypeScript

  • #TypeScript
  • #POO
A palavra-chave extends é usada em TypeScript (e também em outras linguagens de programação orientadas a objetos) para criar uma classe que herda de outra classe. Quando uma classe estende outra, ela herda todas as propriedades e métodos da classe base (superclasse). A classe derivada (subclasse) pode adicionar novas propriedades e métodos ou sobrescrever métodos existentes da classe base.

Extends

No exemplo abaixo, a classe Carro estende a classe Veiculo, herdando suas propriedades e métodos. Além disso, Carro adiciona uma nova propriedade “numeroDePortas ”e um novo método "abrirPorta", além de sobrescrever o método descrever.

// Definindo a classe base Veiculo
class Veiculo {
marca: string;
modelo: string;
ano: number;

constructor(marca: string, modelo: string, ano: number) {
  this.marca = marca;
  this.modelo = modelo;
  this.ano = ano;
}

descrever(): string {
  return `Este veículo é um ${this.marca} ${this.modelo} do ano ${this.ano}.`;
}

ligar(): string {
  return `O ${this.marca} ${this.modelo} está ligado.`;
}
}

// Definindo a classe derivada Carro que estende Veiculo
class Carro extends Veiculo {
numeroDePortas: number;

constructor(marca: string, modelo: string, ano: number, numeroDePortas: number) {
  super(marca, modelo, ano); // Chamando o construtor da classe base
  this.numeroDePortas = numeroDePortas;
}

// Sobrescrevendo o método descrever
descrever(): string {
  return `${super.descrever()} Ele tem ${this.numeroDePortas} portas.`;
}

abrirPorta(porta: number): string {
  if (porta > 0 && porta <= this.numeroDePortas) {
    return `A porta ${porta} está aberta.`;
  } else {
    return `Este carro não tem a porta número ${porta}.`;
  }
}
}

// Exemplo de uso das classes
const meuCarro = new Carro('Toyota', 'Corolla', 2020, 4);
A palavra-chave implements é usada para garantir que uma classe satisfaça um contrato especificado por uma interface. Uma interface define um conjunto de propriedades e métodos que a classe deve implementar, mas não fornece implementações para esses métodos. Quando uma classe implementa uma interface, ela deve fornecer implementações para todos os membros da interface.

Implements

No exemplo abaixo, a interface Descritível define o método descrever. A classe Moto implementa esta interface, garantindo que o método descrever esteja presente na classe Moto.

// Definindo a interface Descritivel
interface Descritivel {
descrever(): string;
}

// Definindo a classe Moto que implementa a interface Descritivel
class Moto implements Descritivel {
marca: string;
modelo: string;
ano: number;

constructor(marca: string, modelo: string, ano: number) {
  this.marca = marca;
  this.modelo = modelo;
  this.ano = ano;
}

descrever(): string {
  return `Esta moto é uma ${this.marca} ${this.modelo} do ano ${this.ano}.`;
}
}

// Exemplo de uso da classe Moto
const minhaMoto = new Moto('Honda', 'CBR', 2019);

Diferença principal

  • extends é usado para herança de classes, onde uma classe herda propriedades e métodos de outra classe.
  • implements é usado para implementar interfaces, onde uma classe deve fornecer implementações para os métodos e propriedades definidos pela interface.

Enquanto extends envolve a herança de funcionalidade existente, implements envolve a conformidade com um contrato especificado.

Compartilhe
Comentários (0)