¿Java Interface Metodos privados? . Esta es una pregunta que nos puede parecer absurda ya que un interface esta diseñado por métodos eminentemente públicos. Si a un método de un interface en Java no se le asigna un ámbito de visibilidad es publico por defecto . La pregunta que uno se puede hacer es ¿Puede un interface de Java soportar métodos privados? La respuesta parece trivial y debiera ser que No. Lamentablemente las cosas no son tan sencillas como parece y un interface a partir de Java 8 puede disponer de métodos con código y dentro de ellos podrían existir métodos privados .
Java Interface Metodos privados
Esos métodos con código pueden ser de dos tipos . Default Methods que hacen referencia a métodos que afectan a las instancias de la clase o Static Methods que son métodos estáticos como su nombre indica y pertenecen a la clase en sí. Estos métodos podrían ser privados a nivel de una interface. Vamos a poner un ejemplo , imaginémonos que disponemos de un interface que se denomina Facturable. Ese interface tiene un método importe() que nos indica el importe Facturable de un Objeto.
public interface Facturable {
double importeTotal();
} Puedo por lo tanto crear una clase que implemente este interface :
public class Caja implements Facturable {
private double importe;
public Caja(double importe) {
super();
this.importe = importe;
}
@Override
public double importeTotal() {
// TODO Auto-generated method stub
return importe;
}
}
Con lo cual nos encontramos en una situación clásica una Caja puede ser Facturable y la implementación del interface se puede usar:
public class PrincipalFacturable {
public static void main(String[] args) {
Caja c=new Caja(100);
Caja c2= new Caja(200);
System.out.println(c.importeTotal());
}
} El resultado será :
100.0
Ahora bien cuando uno tiene elementos facturables puede hacer unos que sean mas urgentes de cobrar que otros. Podríamos diseñar el interface con un método estático privado y un método default ( de instancia).
public interface Facturable {
double importeTotal();
private static Facturable esMasUrgente(Facturable a , Facturable b) {
return a.importeTotal()>b.importeTotal()?a:b;
}
default Facturable esMasUrgente(Facturable b) {
return esMasUrgente(this,b);
}
}
De esta manera tenemos un Java Interface Private Methods . El método privado define que elemento Facturable es más urgente de cobrar y luego usa un default método publico para hacerle visible para la clase. Es momento de usarle.
public class PrincipalFacturable {
public static void main(String[] args) {
Caja c=new Caja(100);
Caja c2= new Caja(200);
System.out.println(c.esMasUrgente(c2).importeTotal());
}
}
Esto nos imprimirá 200 que es el importe más urgente de cobrar utilizando el Default Method esMasUrgente que delega en el Java Interface Private Method.