Qual a diferenca entre classes abstratas e interfaces? Quando usar uma ou outra?
Qual a diferenca entre classes abstratas e interfaces? Quando usar uma ou outra?
Classes abstratas podem ter código em seus métodos, e pode haver construtor, e atributos, interfaces podem ter apenas assinaturas dos métodos, e não podem conter atributos, apenas constantes.
Há inúmeras situações para decidir escolher uma ou outra, mas a regra geral é: se você precisar apenas da assinatura do método, use interface, isto é, quando não é nenhum algoritmo em comum entre as classes derivadas, ou seja, se você está usando classe abstrata e não tem a seguinte linha no método sobrescrito, está errado.
@Override
public string Request(String url) {
super(); // essa
return "anything"
}
Pois isso significa que tu estás herdando regra que não lhe serves.
Entendi. Hoje eu vejo muito em livros, falando que o prefira usar as interfaces do que as classes abstratas, o que vc acha disso?
Faz total sentido, pois seu programa fica mais performático, e você tem mais controle sobre os estados dos seus objetos, visto que você não está herdando nada que você não precisa, só a assinatura. Além disso, faz parte da do princípio da desacoplação, pois a classe mãe pode estar dependendo ou herdando de inúmeras outras classes que não faz sentido para uma classe derivada.