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 :)