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 a capacidade de expressão lambda do Java 8.

Por exemplo, as interfaces 'Lista' ou 'Coleção' não têm declaração de método 'forEach'. Portanto, adicionar esse método simplesmente interromperá as implementações do framework de coleção. Java 8 apresenta o método padrão para que a interface Lista / Coleção 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 que uma classe esteja implementando duas interfaces com os mesmos métodos padrão. O código a seguir explica como essa ambigüidade 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 estáticos padrão

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

public 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 maneira -

C:\JAVA>java Java8Tester

Ele deve produzir a seguinte saída -

I am a vehicle!
I am a four wheeler!
Blowing horn!!!
I am a car!