public interface Herramienta {
default public void ajustar(){
System.out.println("Ajustando herramienta desde interface");
}
}
public class HerramientaImpl implements Herramienta {
public void limpiar(){
System.out.println("Limpiando herramienta");
}
}
public class TestHerramienta {
public static void main(String[] args) {
HerramientaImpl herramientaImpl= new HerramientaImpl();
herramientaImpl.ajustar();
}
}
Un problema de ambiguedad se podría producir cuando una clase implementa dos o mas interfaces que tienen metodos por defecto con el mismo nombre:
public interface HerramientaElectrica{
default public void ajustar(){
System.out.println("Ajustando herramienta desde HerramientaElectrica ");
}
}
public interface HerramientaManual {
default public void ajustar(){
System.out.println("Ajustando herramienta desde HerramientaManual ");
}
}
public class HerramientaImpl implements HerramientaElectrica,HerramientaManual {
}
La solución al problema se encuentra en definir una implementación al método por defecto:
public class HerramientaImpl implements HerramientaElectrica,HerramientaManual {
@Override
public void ajustar() {
}
}
Para invocar una implementación del método por defecto lo hacemos sobreescribiendo en nuestra clase
public class HerramientaImpl implements HerramientaElectrica,HerramientaManual {
@Override
public void ajustar() {
HerramientaElectrica.super.ajustar();
}
}
No hay comentarios.:
Publicar un comentario