Sobes.tech
Middle

Qual é a diferença entre uma classe abstrata e um mixin?

sobes.tech IA

Resposta da IA

Classe abstrata:

  • Pode ter métodos e campos normais e abstratos.
  • Não é possível criar uma instância de uma classe abstrata diretamente.
  • Pode conter construtores.
  • Herda-se usando a palavra-chave extends. Suporta herança única.
  • É usada para definir comportamentos e estruturas comuns para subclasses.

Mixin:

  • Pode conter métodos e campos, mas não pode definir construtores.
  • Não é destinado a criar instâncias.
  • É usado para adicionar funcionalidades às classes que não se encaixam na hierarquia de herança.
  • Combina-se com uma classe usando a palavra-chave with. Uma classe pode usar vários mixins.
Característica Classe abstrata Mixin
Instância Não pode ser criada diretamente Não pode ser criada
Construtores Pode ter Não pode ter
Herança extends (único) with (múltiplo)
Propósito principal Definir hierarquia Adicionar comportamento

Exemplo de uso de uma classe abstrata:

abstract class LivingBeing {
  void breathe(); // Método abstrato

  void grow() { // Método normal
    print('Crescendo...');
  }
}

class Human extends LivingBeing {
  @override
  void breathe() {
    print('Respirando com pulmões');
  }
}

Exemplo de uso de um mixin:

mixin Walkable {
  void walk() {
    print('Andando...');
  }
}

mixin Swimmable {
  void swim() {
    print('Nadando...');
  }
}

class Dog with Walkable, Swimmable {
  // A classe Dog agora tem os métodos walk() e swim()
}