English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
A sintaxe do método padrão é a seguinte:
public interface Vehicle { default void print(){ System.out.println("Eu sou um veículo!"); } }
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(); } }
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!!!"); } }
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!