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()
}