Java 8 - Métodos padrão
Java 8 introduz um novo conceito de implementação de método padrão em interfaces. Esse recurso é adicionado para compatibilidade com versões anteriores para que as interfaces antigas possam ser usadas para aproveitar o recurso de expressão lambda do Java 8.
Por exemplo, as interfaces 'List' ou 'Collection' não possuem a declaração do método 'forEach'. Assim, adicionar tal método simplesmente quebrará as implementações da estrutura de coleta. Java 8 introduz o método padrão para que a interface List/Collection possa ter uma implementação padrão do método forEach, e a classe que implementa essas interfaces não precisa implementar o mesmo.
Sintaxe
public interface vehicle { default void print() { System.out.println("I am a vehicle!"); } }
Vários padrões
Com funções padrão em interfaces, existe a possibilidade de uma classe estar implementando duas interfaces com os mesmos métodos padrão. O código a seguir explica como essa ambiguidade pode ser resolvida.
public interface vehicle { default void print() { System.out.println("I am a vehicle!"); } } public interface fourWheeler { default void print() { System.out.println("I am a four wheeler!"); } }
A primeira solução é criar um método próprio que substitua a implementação padrão.
public class car implements vehicle, fourWheeler { public void print() { System.out.println("I am a four wheeler car vehicle!"); } }
A segunda solução é chamar o método padrão da interface especificada usando super.
public class car implements vehicle, fourWheeler { public void print() { vehicle.super.print(); } }
Métodos padrão estáticos
Uma interface também pode ter métodos auxiliares estáticos do Java 8 em diante.
public interface vehicle { default void print() { System.out.println("I am a vehicle!"); } static void blowHorn() { System.out.println("Blowing horn!!!"); } }
Exemplo de método padrão
Crie o seguinte programa Java usando qualquer editor de sua escolha em, digamos, C:\> JAVA.
Java8Tester.java
Demonstração ao vivopublic class Java8Tester { public static void main(String args[]) { Vehicle vehicle = new Car(); vehicle.print(); } } interface Vehicle { default void print() { System.out.println("I am a vehicle!"); } static void blowHorn() { System.out.println("Blowing horn!!!"); } } interface FourWheeler { default void print() { System.out.println("I am a four wheeler!"); } } class Car implements Vehicle, FourWheeler { public void print() { Vehicle.super.print(); FourWheeler.super.print(); Vehicle.blowHorn(); System.out.println("I am a car!"); } }
Verifique o resultado
Compile a classe usando javac compilador da seguinte forma -
C:\JAVA>javac Java8Tester.java
Agora execute o Java8Tester da seguinte forma -
C:\JAVA>java Java8Tester
Deve produzir a seguinte saída -
I am a vehicle! I am a four wheeler! Blowing horn!!! I am a car!
Java