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.