Sobes.tech
Middle

¿Cuál es la diferencia entre una clase abstracta y un mixin?

sobes.tech AI

Respuesta de la IA

Clase abstracta:

  • Puede tener métodos y campos normales y abstractos.
  • No se puede crear una instancia de una clase abstracta directamente.
  • Puede contener constructores.
  • Se hereda mediante la palabra clave extends. Se soporta la herencia simple.
  • Se usa para definir comportamientos y estructuras comunes para las subclases.

Mixin:

  • Puede contener métodos y campos, pero no puede definir constructores.
  • No está destinado a crear instancias.
  • Se usa para agregar funcionalidad a las clases que no encaja en la jerarquía de herencia.
  • Se combina con una clase mediante la palabra clave with. Una clase puede usar varios mixins.
Característica Clase abstracta Mixin
Instancia No se puede crear directamente No se puede crear
Constructores Puede tener No puede tener
Herencia extends (únicamente) with (múltiple)
Propósito principal Definir jerarquía Agregar comportamiento

Ejemplo de uso de una clase abstracta:

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

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

class Human extends LivingBeing {
  @override
  void breathe() {
    print('Respiro con pulmones');
  }
}

Ejemplo de uso de un mixin:

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

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

class Dog with Walkable, Swimmable {
  // La clase Dog ahora tiene los métodos walk() y swim()
}