O Java 8 adicionou um método padrão, que pode adicionar novos recursos funcionais à interface sem afetar a classe de implementação da interface. Vamos ilustrar isso com exemplos abaixo.
A cópia do código é a seguinte:
public class MyClass implementos interfacea {
public static void main (string [] args) {
}
@Override
public void diz que é algo () {
// TODO Method Stub
}
}
interface interface interfacea {
public void diz que é algo ();
}
O código acima mostra que a classe MyClass implementa o método SayOMOME () da interface interfacesa. Agora, adicionamos um novo método Sayhi () à interface interfacesa. Se isso for feito, a classe MyClass não poderá ser compilada, a menos que forneçamos o método de implementação de Sayhi ().
O método padrão é muito útil. por exemplo:
A cópia do código é a seguinte:
public class MyClass implementos interfacea {
public static void main (string [] args) {
}
@Override
public void diz que é algo () {
// TODO Method Stub
}
}
interface interface interfacea {
public void diz que é algo ();
public void padrão dizhi () {
System.out.println ("Hi");
}
}
Observe que devemos fornecer implementações de todos os métodos padrão. Portanto, o método padrão torna nosso código mais flexível e também pode gravar métodos para implementá -los na interface. O método implementado será implementado como o método padrão.
Então, o que devo fazer se houver um conflito em várias interfaces?
Como as classes Java podem implementar várias interfaces, pode haver uma situação em que duas ou mais interfaces têm um método de interface padrão com o mesmo nome, causando conflitos. Como a máquina virtual Java está em execução quando o programa está em execução, não está claro qual método padrão você deseja usar. Isso causará um erro de compilação.
Vamos dar uma olhada no exemplo a seguir.
A cópia do código é a seguinte:
public class MyClass implementos interfacea, interfaceB {
public static void main (string [] args) {
MyClass MC = new MyClass ();
Mc.Sayhi ();
}
@Override
public void diz que é algo () {
// TODO Method Stub
}
}
interface interface interfacea {
public void diz que é algo ();
public void padrão dizhi () {
System.out.println ("Hi da interfacea");
}
}
interface interface interfaceB {
public void padrão dizhi () {
System.out.println ("Hi da interfaceB");
}
}
Não pode passar na compilação e relatará o seguinte erro:
"Os métodos padrão duplicados chamados Sayhi com os parâmetros () e () são herdados a partir dos tipos interfaceB e interfacea."
A menos que o método Sayhi () seja substituído na classe MyClass:
A cópia do código é a seguinte:
public class MyClass implementos interfacea, interfaceB {
public static void main (string [] args) {
MyClass MC = new MyClass ();
Mc.Sayhi ();
}
@Override
public void diz que é algo () {
// TODO Method Stub
}
@Override
public void dizhi () {
System.out.println ("Implementação de Sayhi () em MyClass");
}
}
interface interface interfacea {
public void diz que é algo ();
public void padrão dizhi () {
System.out.println ("Hi da interfacea");
}
}
interface interface interfaceB {
public void padrão dizhi () {
System.out.println ("Hi da interfaceB");
}
}
Se você deseja especificar qual método Sayhi () da interface chama, podemos fazer isso:
A cópia do código é a seguinte:
public class MyClass implementos interfacea, interfaceB {
public static void main (string [] args) {
MyClass MC = new MyClass ();
Mc.Sayhi ();
}
@Override
public void diz que é algo () {
// TODO Method Stub
}
@Override
public void dizhi () {
Interfacea.super.sayhi ();
}
}
interface interface interfacea {
public void diz que é algo ();
public void padrão dizhi () {
System.out.println ("Hi da interfacea");
}
}
interface interface interfaceB {
public void padrão dizhi () {
System.out.println ("Hi da interfaceB");
}
}
A resposta é muito simples?