2
respostas

dúvidas com composição

Pessoal, parabéns pelo curso, excelente! Tenho uma dúvida pois estou com dificuldade de manter 2 objetos instanciados na composição. Fiz meu projeto inteiro usando construtores já pré estabelecidos (nome, cpf, salario). Só que agora com a coposição, dá no pointer quando tento acessar o autenticador.setSenha. Já tentei setando a senha separadamente e também  sem o set, diretamente no construtor e usando get. Gostaria de usar esse último, teria alguma dica? Detalhe que sem o construtor herdado ele funciona o setSenha sem problemas.
2 respostas

Poderias mandar um print ou copiar teu código aqui por favor?

Coloquei aqui pedaços do código pois é muito grande. A ideia é criar uma interface que tem um tipo autenticável que autentica gerente e mais 2 classes, administrador e cliente. o problema aqui é que não estou conseguindo trazer o construtor prédefinido no aplication, na construção do objeto. a classe SistemaInterno que faz a autenticação conforme a senha passada.`

public abstract class Funcionario { private String nome; private String cpf; private double salario;

//construtor
public Funcionario(String nome, String cpf, double salario) {
    this.nome = nome;
    this.cpf = cpf;
    this.salario = salario;
}
public Funcionario() {


    }
    }

a área comentada é o construtor que apresenta erro public class Gerente extends Funcionario implements Autenticavel { //Aqui herda e implementa

private Autenticador autenticador;

// construtor super
//public Gerente(String nome, String cpf, double salario) {
    //super(nome, cpf, salario);
//}

//composição public Gerente() { this.autenticador = new Autenticador(); }

@Override
public void setSenha(int senha) {
    this.autenticador.setSenha(senha);
}

}

public interface Autenticavel {

public void setSenha(int senha);

public boolean autentica(int senha);

} ` public class Autenticador { private int senha ;

public void setSenha(int senha) {
    this.senha = senha;
}

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

public class SistemaInterno { private int senha = 222; public void autentica(Autenticavel fa) { boolean autenticacao = fa.autentica(senha); if (autenticacao) { System.out.println(" senha correta"); }else { System.out.println(" senha incorreta"); } } }