Middle
¿En qué consisten las diferencias entre una clase abstracta y un mixin en Dart?
sobes.tech AI
Respuesta de la IA
Clase abstracta:
- No puede ser instanciada directamente.
- Puede contener métodos abstractos (sin implementación) y métodos implementados.
- Las clases heredan de una clase abstracta usando la palabra clave
extends. - Una clase solo puede heredar de una clase (herencia simple).
Mixin:
- No puede ser instanciado directamente.
- No puede tener constructores.
- Puede contener métodos implementados, pero no puede tener métodos abstractos (hasta Dart 2.1, donde aparecieron los mixins abstractos).
- Las clases usan la funcionalidad de los mixins con la palabra clave
with. - Una clase puede usar varios mixins.
- Se usa para reutilizar código y agregar funcionalidad a las clases sin herencia. En esencia, permite "mezclar" comportamientos.
Ejemplo de clase abstracta:
abstract class Animal {
void makeSound(); // Método abstracto
void eat() {
print('Comiendo...');
}
}
class Dog extends Animal {
@override
void makeSound() {
print('¡Guau!');
}
}
Ejemplo de mixin:
mixin CanJump {
void jump() {
print('¡Saltando!');
}
}
class Cat with CanJump { }
Comparación en forma de tabla:
| Característica | Clase abstracta | Mixin |
|---|---|---|
| Instanciación | No | No |
| Constructor | Puede tener | No puede tener |
| Métodos abstractos | Puede tener | No puede tener (hasta Dart 2.1) |
| Métodos implementados | Puede tener | Puede tener |
| Uso | extends |
with |
| Herencia/uso | Herencia simple | Uso múltiple |
| Propósito | Definición de un contrato general | Reutilización de código, adición de comportamiento |