Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Método com Interface

Galera,

Criei uma Interface Autentica:

public interface Autenticavel {

    int senha = 123;
    boolean autentica(int senha);

}

E o método Analista:

public class Analista extends Funcionario implements Autenticavel {
    private int senha;

    public boolean autentica(int senha){
        this.senha = senha;
        if(this.senha != Autenticavel.senha ){
        return false;
        }
        return true;
    }
}

Ate ai tudo bem, esta funcionando. A minha dúvida é na minha nova Classe Gerente, meu objetivo é fazer que o gerente também assine um contrato Autenticavel, porém para um melhor entendimento. Não seria certo ele herdar o corpo do método autentica ? Sem eu ter que passar novamente o código. Ou seja, pq não é possivel informar o corpo do método no contrato Autenticavel ?

public class Gerente extends Funcionario implements Autenticavel {
    private int senha;

        public boolean autentica(int senha) {
        return false;
        }
}
4 respostas
solução!

boa tarde Vitor.

O objetivo da interface é justamente forçar as classes que a implementam implementarem seus métodos, nao podemos ter corpo de método na interface, só assinatura, pois nao podemos instanciar um interface. Logo cada classe que implementa a interface pode ter a implemenação do método que quiser.

Espero ter ajudado, abraços

Vitor, tudo bem ?

Seu gerente deveria ser um (extends) funcionario e como você já implementa a autenficação você só iria sobreescrever o método caso necessário.

Espero ter ajudado.

Abraços :D

Acho que entendi seu problema Vitor. Explico:

Interfaces definem um contrato de que métodos devem ser implementados em uma determinada classe permitindo uma série de coisas. Não é comum, definirmos atributos em interfaces ou valores soltos como fez, acredito que também não seja usual.

Contudo, sua solução pra resolver o problema de duplicação de código deveria seguir para outro caminho. Do jeito que está Herança parece ser o único caminho, neste sentido podemos fazer o seguinte: Criar uma classe chamada, UsuarioAutenticavel que implemente a interface Autenticavel, e todas as outras classes herdariam essa classe de usuário.

Outro cenário seria você ter uma classe Autenticador que implementa a interface Autenticavel e todas as outras classes poderiam usar um objeto desta classe para se autenticar. E ainda, o método autentica, poderia ser estático, evitando que, todos as outras classes precisasssem criar objetos da classe Autenticador. Entende?

Espero ter ajudado, bons estudos!

Vlw pelo apoio galera.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software