Default Methods foram adicionados entre as funcionalidades que podem ser utilizadas nas Interfaces no Java 8. Antes disso toda classe que implementava uma Interface deveria implementar todos os métodos “assinados” por ela, para atender ao contrato. Isso várias vezes gerava muito código repetitivo por causa dos métodos.
Uma solução para isso era utilizar o design pattern Strategy. Criando uma outra classe somente para implementar esse método repetitivo.
Outra solução seria utilizar uma classe abstrata, ao invés de uma interface. Lembrando que ao se utilizar uma classe abstrata não temos garantia que as classes filhas implementarão todos os métodos da classe mãe, podendo levar a desencontros.
Os Default Methods surgem para dar uma solução mais simples para esse problema. Permitindo que possamos realizar a implementação de um método direto na Interface, sem a necessidade de que todas as suas filhas implementem esses métodos específicos, garantindo pelo menos uma implementação padrão (default) pra ele. Deixando para as classes filhas decidirem se querem ou não uma implementação diferente para esse método padrão (default method).
Exemplo:
public interface DefaultInterface {
default String defaultMethod(){
return "HelloWorld";
}
String method();
}
public class ImplementsDefaultInterface implements DefaultInterface{
@Override
public String method() {
return "method";
}
}
Espero que esse conteúdo tenha te ajudado em algo.
Se tem alguma sugestão para melhorar esse artigo, ou encontrou algum erro nele, por favor deixe um comentário, que eu corrijo. Se gostou, por favor compartilhe nas suas redes e ajude o blog.
Te vejo na próxima!
Update1: Como sugestão de um pessoal foda, uma outra vantagem que ficou de fora é: Poder adicionar novos métodos em Interfaces existentes que já foram implementadas por outras classes, sem quebrar nada.
Referência: https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html