Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

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.