sirve - public static java
¿Por qué no puedo usar el método estático de la interfaz implementada? (1)
Como ustedes, especialistas, saben en Java 8, las interfaces pueden tener métodos estáticos que tienen implementaciones dentro de sí mismos.
Como he leído en un tutorial relacionado, las clases que implementan dicha interfaz pueden usar sus métodos estáticos. Pero, tengo un problema que, aquí, lo muestro en un ejemplo más simple que el que tengo
public interface Interface1{
public static void printName(){
System.out.println("Interface1");
}
}
cuando implemento dicha interfaz
public class Class1 implements Interface1{
public void doSomeThing() {
printName();
}
}
Encuentro error de compilación.
The method printName() is undefined for the type Class1
¿Cuál es el problema?
De la especificación del lenguaje Java ,
Una clase C hereda de su superclase directa todos los métodos concretos m (tanto estáticos como de instancia) de la superclase para los que se cumplen todos los siguientes:
- [...]
Una clase C hereda de su superclase directa y superinterfaces directas todos los métodos abstractos y predeterminados (§9.4) m para los cuales se cumplen todos los siguientes:
- [...]
Una clase no hereda métodos estáticos de sus superinterfaces.
Así que ese método no se hereda.
Puedes importar el miembro de forma estática
import static com.example.Interface1.printName;
...
printName();
o usarlo con el nombre de tipo completo
com.example.Interface1.printName();
o importe el tipo al que pertenece printName
y printName
con su nombre corto
import static com.example.Interface1;
...
Interface1.printName();