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 |