# Métodos Default — Java 8

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1700320058931/70eef465-1fe6-4d0f-bf87-6640b8d3620a.jpeg)

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/ "http://blog.caelum.com.br/o-minimo-que-voce-deve-saber-de-java-8/")[](http://blog.caelum.com.br/o-minimo-que-voce-deve-saber-de-java-8/)

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

[**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/ "https://blog.idrsolutions.com/2015/01/java-8-default-methods-explained-5-minutes/")[](https://blog.idrsolutions.com/2015/01/java-8-default-methods-explained-5-minutes/)

[**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 "https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html")[](https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html)

[**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…*www.journaldev.com](http://www.journaldev.com/2752/java-8-interface-changes-static-method-default-method "http://www.journaldev.com/2752/java-8-interface-changes-static-method-default-method")[](http://www.journaldev.com/2752/java-8-interface-changes-static-method-default-method)

[**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 "http://muhammadkhojaye.blogspot.com.br/2014/03/interface-default-methods-in-java-8.html")[](http://muhammadkhojaye.blogspot.com.br/2014/03/interface-default-methods-in-java-8.html)
