Classes Abstratas

Em Dart, você pode criar classes abstratas usando a palavra-chave abstract. Uma classe abstrata é uma classe que não pode ser instanciada diretamente, mas pode ser usada como uma classe base para outras classes. As classes derivadas, ou subclasses, devem implementar os membros abstratos da classe base. Aqui está um exemplo de como você pode criar uma classe abstrata em Dart:

// Definição de uma classe abstrata
abstract class Animal {
  // Método abstrato que deve ser implementado pelas subclasses
  void emitirSom();

  // Método comum que pode ser usado sem implementação nas subclasses
  void dormir() {
    print('Dormindo...');
  }
}

// Uma classe concreta que herda da classe abstrata Animal
class Cachorro extends Animal {
  // Implementação do método abstrato emitirSom
  @override
  void emitirSom() {
    print('Latindo...');
  }
}

// Outra classe concreta que herda da classe abstrata Animal
class Gato extends Animal {
  // Implementação do método abstrato emitirSom
  @override
  void emitirSom() {
    print('Miando...');
  }
}

void main() {
  // Instanciando objetos das classes concretas
  var cachorro = Cachorro();
  var gato = Gato();

  // Chamando métodos das classes concretas
  cachorro.emitirSom();  // Output: Latindo...
  cachorro.dormir();     // Output: Dormindo...

  gato.emitirSom();      // Output: Miando...
  gato.dormir();         // Output: Dormindo...
}

Neste exemplo, a classe Animal é uma classe abstrata que contém um método abstrato chamado emitirSom. As classes concretas Cachorro e Gato herdam da classe Animal e implementam o método emitirSom. A classe Animal também possui um método comum chamado dormir, que tem uma implementação padrão, mas pode ser sobrescrito pelas subclasses se necessário.

É importante notar que você não pode criar uma instância direta de uma classe abstrata em Dart. Você só pode criar instâncias das subclasses concretas que implementam todos os membros abstratos da classe abstrata.