Sobes.tech
Middle

Quais são as diferenças entre uma classe abstrata e um mixin em Dart?

sobes.tech IA

Resposta da IA

Classe abstrata:

  • Não pode ser instanciada diretamente.
  • Pode conter métodos abstratos (sem implementação) e métodos implementados.
  • As classes herdam de uma classe abstrata usando a palavra-chave extends.
  • Uma classe só pode herdar de uma classe (herança simples).

Mixin:

  • Não pode ser instanciado diretamente.
  • Não pode ter construtores.
  • Pode conter métodos implementados, mas não pode ter métodos abstratos (até Dart 2.1, onde surgiram os mixins abstratos).
  • As classes usam a funcionalidade dos mixins com a palavra-chave with.
  • Uma classe pode usar vários mixins.
  • Usado para reutilizar código e adicionar funcionalidades às classes sem herança. Em essência, permite "misturar" comportamentos.

Exemplo de classe abstrata:

abstract class Animal {
  void makeSound(); // Método abstrato
  void eat() {
    print('Comendo...');
  }
}

class Dog extends Animal {
  @override
  void makeSound() {
    print('Au!');
  }
}

Exemplo de mixin:

mixin CanJump {
  void jump() {
    print('Saltando!');
  }
}

class Cat with CanJump { }

Comparação em forma de tabela:

Característica Classe abstrata Mixin
Instanciação Não Não
Constructor Pode ter Não pode ter
Métodos abstratos Pode ter Não pode ter (até Dart 2.1)
Métodos implementados Pode ter Pode ter
Uso extends with
Herança/Utilização Herança simples Utilização múltipla
Propósito Definir um contrato geral Reutilização de código, adição de comportamento