usar sirve restricción que para métodos metodos metodo los llamar estáticos estaticos estatico ejemplos definicion cuando como clase atributos java inheritance interface java-8 static-methods

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();