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

Dúvida exercício pedindo para implementar uma interface a partir da classe Funcionario

Boa noite pessoal.

Não entendi ou não vi coerência no exercício que estou fazendo. Poderiam me ajudar? Se trata do "Mãos na massa: Trabalhando com interfaces" da Aula 6 do curso. É pedido para que a classe abstrata Funcionario implemente a Interface Autentica.

public abstract class Funcionario implements Autenticavel{

Interface Autenticavel:

public abstract interface Autenticavel{

    public abstract void setSenha(int senha);

    public abstract boolean autentica(int senha);
}

Classe SistemaInterno:


public class SistemaInterno {

    int senha=2222;

    public void autentica(Autenticavel g) {
        boolean autenticou=g.autentica(this.senha);
        if(autenticou) {
            System.out.println("Autenticado");
        }else {
            System.out.println("Não autenticado");
        }
    }

}

Funcionario foi colocado como abstrata justamente para não poder ser instanciada, pois no sistema não pode existir um objeto Funcionario, pode ter sim um Gerente, Designer, Editor de vídeo ... Além disso, não é todo funcionário que poderá autenticar , como o Designer e Editor de vídeo. Isso foi informado nas vídeos aulas, é nossos requisitos impostos pelo chefe. Por isso como iniciante não sei se estou correto, mas não vi coerência nessa parte do exercício proposto.

Também me surgiu uma segunda dúvida tentando fazer o que foi pedido. Por qual motivo o Java me permite implementar uma interface que possui por exemplo dois métodos, sem eu precisar implementar esses dois métodos quando utilizo uma classe abstrata?

Por exemplo o código abaixo não dá erro, se eu retirar o abstract sou obrigado a implementar os métodos, pois assinei o contrato com a interface Autenticavel. Justamente por ser abstrata e não poder ser instanciada o Java deixa passar?

public abstract class Funcionario implements Autenticavel {

    private String nome;
    private String cpf;
    private double salario;
}

public abstract interface Autenticavel {

    public abstract void setSenha(int senha);

    public abstract boolean autentica(int senha);

}

Obrigado pela ajuda.

3 respostas
solução!

Boa noite, Eduardo! Como vai?

Respondendo suas perguntas:

Funcionario foi colocado como abstrata justamente para não poder ser instanciada, pois no sistema não pode existir um objeto Funcionario, pode ter sim um Gerente, Designer, Editor de vídeo ... Além disso, não é todo funcionário que poderá autenticar , como o Designer e Editor de vídeo. Isso foi informado nas vídeos aulas, é nossos requisitos impostos pelo chefe. Por isso como iniciante não sei se estou correto, mas não vi coerência nessa parte do exercício proposto.

Que satisfação, aspira! Vc está certo! Se a classe abstrata Funcionarioimplementar a interface Autenticavel, funcionarios do tipo Designer e Editor poderão se autenticar que seria um erro de acordo com os requisitos. Portanto, eu corrigi o texto do exercício! Dê uma conferida lá e veja se agora faz sentido!

Também me surgiu uma segunda dúvida tentando fazer o que foi pedido. Por qual motivo o Java me permite implementar uma interface que possui por exemplo dois métodos, sem eu precisar implementar esses dois métodos quando utilizo uma classe abstrata? Por exemplo o código abaixo não dá erro, se eu retirar o abstract sou obrigado a implementar os métodos, pois assinei o contrato com a interface Autenticavel. Justamente por ser abstrata e não poder ser instanciada o Java deixa passar?

É isso aí, o Java sabe que classes abstratas serão estendidas por outras classes concretas, afinal de contas não faz sentido criar uma classe abstrata que ninguém estende! Então ele deixa para cobrar a assinatura do contrato apenas na classe concreta que é quem realmente será instânciada! O que faz muito sentido! Inclusive, a mesma coisa acontece quando temos uma classe abstrata estendendo outra classe abstrata como acontece nessa aula quando FuncionarioAutenticavel estende de Funcionario e o instrutor explica que a cobrança da implementação de métodos abstrados só acontece nas classes concretas aos 14:55!

Qualquer coisa é só falar!

Grande abraço e bons estudos!

Perfeito Gabriel. Muito obrigado!

Por nada, Eduardo!

Sempre que tiver qualquer dúvida é só mandar pro pessoal aqui no fórum!

Grande abraço e bons estudos!