Quais as diferenças e semelhanças entre classes abstratas e interfaces? Fiquei um pouco confuso.
Quais as diferenças e semelhanças entre classes abstratas e interfaces? Fiquei um pouco confuso.
Olá, Maicon, como vai?
As classes abstratas e interfaces possuem propósitos semelhantes, mas diferem em alguns aspectos importantes.
Uma classe abstrata pode ter métodos implementados e também métodos abstratos (sem implementação), funcionando como um modelo para outras classes. Ela pode conter atributos e construtores e permite herança única. Exemplo:
abstract class Animal {
  String nome;
  Animal(this.nome);
  void fazerSom(); // Método abstrato
  void dormir() {
    print('$nome está dormindo.');
  }
}
class Cachorro extends Animal {
  Cachorro(String nome) : super(nome);
  @override
  void fazerSom() {
    print('$nome está latindo.');
  }
}
Já uma interface define apenas contratos, ou seja, métodos sem implementação, forçando as classes que a implementam a fornecer suas próprias versões dos métodos. Além disso, uma classe pode implementar várias interfaces ao mesmo tempo. Por exemplo:
abstract class Voar {
  void voar();
}
abstract class Nadar {
  void nadar();
}
class Pato implements Voar, Nadar {
  @override
  void voar() {
    print('O pato está voando.');
  }
  @override
  void nadar() {
    print('O pato está nadando.');
  }
}
Espero ter ajudado!
Siga firme nos seus estudos e conte com o fórum sempre que precisar.
Abraços :)