English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial Básico de Java

Controle de fluxo Java

Java arrays

Java orientado a objetos (I)

Java orientado a objetos (II)

Java orientado a objetos (III)

Tratamento de Exceção Java

Lista Java (List)

Java Fila (Fila)

Mapa Java

Conjunto Java

Entrada e saída do Java (I/O)

Reader do Java/Writer

Outros tópicos do Java

Java 8 Método padrão

Java 8 Novas Características

Java 8 Foi adicionado o método padrão da interface.

Em termos simples, o método padrão é que a interface pode ter implementação de método e não é necessário que a classe implemente o método.

Basta adicionar a palavra-chave default antes do nome do método para implementar um método padrão.

Por que ter essa característica?

Primeiro, as interfaces anteriores eram uma espada de dois gumes, a vantagem era programar para abstração em vez de programar para o específico, a desvantagem era que, quando precisávamos modificar a interface, precisávamos modificar todos os classes que implementam a interface, no java 8 As coleções anteriores não tinham método foreach, a solução usual seria adicionar novos métodos e implementações aos interfaces relacionados no JDK. No entanto, para versões lançadas, não é possível adicionar novos métodos aos interfaces sem afetar as implementações existentes. Portanto, foram introduzidos métodos padrão. Seus objetivos são resolver problemas de compatibilidade entre a modificação das interfaces e as implementações existentes.

Sintaxe

A sintaxe do método padrão é a seguinte:

public interface Vehicle {
   default void print(){
      System.out.println("Eu sou um veículo!");
   }
}

Muitos métodos padrão

Um interface tem métodos padrão, considere a seguinte situação, uma classe implementa várias interfaces e essas interfaces têm métodos padrão idênticos, o seguinte exemplo ilustra a solução para esse caso:

public interface Vehicle {
   default void print(){
      System.out.println("Eu sou um veículo!");
   }
}
 
public interface FourWheeler {
   default void print(){
      System.out.println("Eu sou um veículo de quatro rodas!");
   }
}

A primeira solução é criar seu próprio método padrão para sobrescrever o método padrão da interface:

public class Car implements Vehicle, FourWheeler {
   default void print(){
      System.out.println("Eu sou um carro de quatro rodas!");
   }
}

A segunda solução é usar super para chamar o método padrão específico da interface:

public class Car implements Vehicle, FourWheeler {
   public void print(){
      Vehicle.super.print();
   }
}

Método padrão estático

Java 8 Outra característica é que as interfaces podem declarar (e fornecer implementação) métodos estáticos. Por exemplo:

public interface Vehicle {
   default void print(){
      System.out.println("Eu sou um veículo!");
   }
    // Método estático
   static void blowHorn(){
      System.out.println("Toque o sino!!!");
   }
}

Exemplo de método padrão

Podemos entender o uso dos métodos padrão a partir do seguinte código, que pode ser colocado em Java8No arquivo Tester.java :

public class Java8Tester {
   public static void main(String args[]){
      Vehicle vehicle = new Car();
      vehicle.print();
   }
}
 
interface Vehicle {
   default void print(){
      System.out.println("Eu sou um veículo!");
   }
    
   static void blowHorn(){
      System.out.println("Toque o sino!!!");
   }
}
 
interface FourWheeler {
   default void print(){
      System.out.println("Eu sou um veículo de quatro rodas!");
   }
}
 
class Car implements Vehicle, FourWheeler {
   public void print(){
      Vehicle.super.print();
      FourWheeler.super.print();
      Vehicle.blowHorn();
      System.out.println("Eu sou um carro!");
   }
}

Execute o script acima, o resultado de saída será:

$ javac Java8Tester.java 
$ java Java8Tester
Eu sou um veículo!
Eu sou um veículo de quatro rodas!
Toque o sino!!!
Eu sou um carro!

Java 8 Novas Características