Métodos Default — Java 8

Um novo recurso já presente nas linguagem C# e Scala foi adicionado ao Java, na versão 8.

O modificador default permite que se adicione métodos a uma interface sem o risco de perder compatibilidade com versões anteriores. A implementação do método default da interface é usada caso a classe concreta não o implemente.

Vamos ver na prática como funciona?

Interface ICaixaEletronico que define o método sacar(float valor)

Classe CaixaEletronico que implementa a interface ICaixaEletronico e o método sacar(float valor)

No cenário atual, se eu definir um método novo na interface ICaixaEletronico, eu serei obrigado a implementá-lo na classe CaixaEletronico. Nessa hora, o modificador default vem para auxiliar.

Note que na interface, eu defini o método verificaFraude() e já coloquei a implementação padrão que será utilizada

Utilizando o modificador default na definição do método na interface, não precisei implementar o método na classe CaixaEletrônico

Posso chamar o método verificaFraude normalmente

Como mágica, ele é executado com a implementação definida na interface

Mas, e se eu quiser mudar a implementação? Sem problemas. Você ainda pode implementar o método na classe CaixaEletronico.

Implementação do método verificaFraude() na classe CaixaEletronico

Resultado da execução

Uma armadilha que pode acontecer é o caso de conflito de métodos default em interfaces diferentes. Vamos supor que além da interface ICaixaEletronico, temos também a interface IInternetBanking que por acaso também tem um método default chamado verificaFraude().

E temos a classe Banco que implementa ICaixaEletronico e IInternetBanking. Neste caso, a classe não compilará! O Java vai nos dar a seguinte mensagem de erro: “Duplicate default methods named verificaFraude with the parameters () and () are inherited from the types IInternetBanking and ICaixaEletronico”

Assim temos duas opções: A primeira é implementar o método conflituoso na nossa classe.

Sobrescrevemos as implementações default do método verificaFraude() direto na classe Banco

Vamos executar o código e…

Temos o resultado com a execução da implementação do método verificaFraude() que foi sobrescrito na classe Banco

A segunda opção é invocar o método da interface desejada.

No código acima, estamos definindo de qual interface será a implementação do método verificaFraude. No caso, será da interface IInternetBanking

Temos o resultado da implementação do método verificaFraude() na interface IInternetBanking

Esta foi uma rápida explicação sobre os métodos default do Java 8. Gostou do texto? Clique no botão Recommend, logo abaixo. Fazendo isso, você ajuda esta história a ser encontrada por mais pessoas. Seu comentário também é bem-vindo.

Aqui estão os links que me inspiraram e que podem lhe ajudar a descobrir um pouco mais sobre o assunto.

[O mínimo que você deve saber de Java 8
Depois de anos de espera, o Java 8 tem sua versão final disponível para download! Na Caelum trabalhamos há algum tempo…blog.caelum.com.br](http://blog.caelum.com.br/o-minimo-que-voce-deve-saber-de-java-8/ "blog.caelum.com.br/o-minimo-que-voce-deve-s..")

[Java 8 Default Methods
Java8 Default Methods - Learn Java 8 in simple and easy steps starting from Overview, Environment Setup, Lambda…tutorialspoint.com](http://www.tutorialspoint.com/java8/java8_default_methods.htm "tutorialspoint.com/java8/java8_default_meth..")

[Java 8 Default Methods Explained in 5 minutes
In my previous articles, we have looked at Java 8 Lambda Expressions and Streams. In this article will be looking at…blog.idrsolutions.com](https://blog.idrsolutions.com/2015/01/java-8-default-methods-explained-5-minutes/ "blog.idrsolutions.com/2015/01/java-8-defaul..")

[Default Methods
The section Interfaces describes an example that involves manufacturers of computer-controlled cars who publish…docs.oracle.com](https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html "docs.oracle.com/javase/tutorial/java/IandI/..")

[Java 8 Interface Changes - static method, default method - JournalDev
Java 8 Interface Changes. Java Interface Static Method, Java Interface Default Method, Java 8 interface static methods…journaldev.com](http://www.journaldev.com/2752/java-8-interface-changes-static-method-default-method "journaldev.com/2752/java-8-interface-change..")

[Interface Default Methods in Java 8
Java 8 introduces " Default Method" or ( Defender methods) new feature, which allows developer to add new methods to…muhammadkhojaye.blogspot.com.br](http://muhammadkhojaye.blogspot.com.br/2014/03/interface-default-methods-in-java-8.html "muhammadkhojaye.blogspot.com.br/2014/03/int..")