Meu deus, mas quem criou esse exercício?
Métodos estáticos em uma interface já não fazem muito sentido (aliás, antes do Java 8 nem era permitido). Criar uma classe que “implementa um método estático de uma interface” faz menos sentido ainda.
Bom, como você deu a entender que ainda está começando, então talvez seja um tópico avançado demais, mas fica aqui para você ler no futuro: Em orientação a objetos, por que interfaces são úteis?
Mas pra resumir: uma interface serve para estabeler um contrato (tenho esses métodos, que recebem dados X e Y, e retornam Z). Em uma classe você só implementa métodos não-estáticos de uma interface. Exemplo:
public interface ManipulaArquivos {
public void lerArquivo(String nomeArquivo); // método não-estático, e sem corpo
}
// classe que implementa a interface
public class LeitorDeArquivos implements ManipulaArquivos {
public void lerArquivo(String nomeArquivo) {
// código que lê o arquivo
}
}
Repare que o método não-estático da interface não tem corpo (não tem o { }
), pois ele só serve para dizer “eu faço isso” (eu tenho um método lerArquivo
que recebe uma String
e lê o conteúdo dele). Mas quem vai de fato fazer a leitura é a classe que implementar a interface.
E tem um detalhe importante: como eu disse que a classe LeitorDeArquivos
implementa a interface ManipulaArquivos
, ela tem que obrigatoriamente implementar todos os métodos da interface, senão o código nem sequer compila.
Já com um método estático, nada disso acontece, pois um método estático deve obrigatoriamente ter um corpo, caso contrário ele nem compila:
public interface ManipulaArquivos {
public static void leitor(String path) throws IOException { // método estático tem que ter um corpo
System.out.println("manipulador de arquivo");
};
}
public class LeitorDeArquivo implements ManipulaArquivos {
public static void leitor(String path) throws IOException {
System.out.println("Leitor de arquivo");
}
}
Só que o método estático em LeitorDeArquivo
não está implementando a interface (na verdade ele nem é obrigatório para que o código compile). Na verdade você está criando dois métodos estáticos diferentes, sem relação entre si (não há uma implementação da interface, não há ganho nenhum em fazer isso na verdade).
Ou seja, esse exercício está - na minha humilde opinião - desensinando. Ao usar interfaces de forma completamente desnecessária, ainda usa um recurso de uso questionável (métodos estáticos em uma interface, que raramente são úteis - não faz tanta diferença se estivessem em uma classe), e ainda manda fazer algo de forma errada (com métodos estáticos você não está implementando a interface).
Mas enfim, para satisfazer o exercício, bastaria fazer algo como o @wldomiciano já indicou.