Correto ou incorreto depende mais de como você do que de uma regra pré-estabelecida. Mas o seu entendimento tem algumas falhas que tornam a coisa mais confusa, então vamos por partes:
Primeiro, o implements só poderia ser usado se Funcoes fosse uma interface (não uma classe). Sendo uma interface, seus métodos serão vazios:
public interface Funcoes{
public boolean validaCNPJ(<args>);
public boolean validaIE(<args>);
}
Se CadastroCliente fosse
implementar Funcoes, dentro de cadastro de clientes você teria de escrever o código de cada uma desses métodos. E se criar uma classe CadastroFornecedor, também, e assim sucessivamente. E note que, no caso dessas validações, o código não muda. Para a validação de CNPJ, não importa se o cnpj é de um cliente ou de um fornecedor, o código é essencialmente o mesmo:
public class CadastroCliente implements Funcoes {
public CadastroCliente() {
validaCNPJ(<arg>);
}
@Override
public boolean validaCNPJ(<args>){
// você é obrigado à colocar o método aqui porque o contrato com a classe Funcoes obriga essa declaração
}
@Override
public boolean validaIE(<args>){
// você é obrigado à colocar o método aqui porque o contrato com a classe Funcoes obriga essa declaração
}
}
public class CadastroFornecedor implements Funcoes {
public CadastroFornecedor () {
validaCNPJ(<arg>);
}
@Override
public boolean validaCNPJ(<args>){
// você é obrigado à colocar o método aqui porque o contrato com a classe Funcoes obriga essa declaração
}
@Override
public boolean validaIE(<args>){
// você é obrigado à colocar o método aqui porque o contrato com a classe Funcoes obriga essa declaração
}
}
Então, nesse contexto, vale pouco a pena que um CadastroCliente implemente Funcoes. Do mesmo modo, note que os métodos da classe Funcoes possivelmente não mudam e independem do estado geral da classe Funcoes (que os contém), ou seja, o método validaCNPJ() vai validar uma entrada qualquer independente de um objeto do tipo Funcoes. Dito isso (novamente, nesse contexto), vale a pena que os métodos da classe funções sejam estáticos, o que tira a necessidade de você criar uma instância da classe Funcoes para usá-los.
public class Funcoes{
public static boolean validaCNPJ(<args>){
}
public static boolean validaIE(<args>){
}
}
public class CadastroCliente {
(...)
if (Funcoes.validaCNPJ(<arg>)) // note que, aqui, Funcoes se refere à classe, não à uma instância dela
System.out.println("CNPJ valido");
else
System.out.println("CNPJ invalido");
}
(...)
Abraço.