1
resposta

[Dúvida] Sem diferença entre protected e private

Ao contrário do que está sendo mostrado no vídeo, no meu código não aparenta ter nenhuma diferença entre usar protected ou private, o getBonificacao() do Gerente não apresenta erro em qualquer uma das duas formas... Gostaria de saber se estou fazendo algo errado. A única disparidade entre o que estou fazendo e o que o professor fez que eu consigo dizer só de olhar é que eu estou usando o IntelliJ e eu fiz um construtor pra passar o salário em vez de usar um set.

Main.java

import Funcionarios.*;
public class Main{
    public static void main(String[] args) {
        Gerente g = new Gerente(5000);
        Funcionario f = new Funcionario(5000);

        System.out.println(f.getBonificacao() + "|" + g.getBonificacao());
    }
}

--

Funcionario.java

package Funcionarios;

public class Funcionario {
    private String nome;
    private String cpf;
    protected double salario;
    private String senha;

    public Funcionario(double salario){
        this.salario = salario;
    }

    public String getNome() {
        return this.nome;
    }

    public String getCpf() {
        return this.cpf;
    }

    public double getSalario() {
        return this.salario;
    }

    public double getBonificacao(){
        return this.getSalario() * 0.1;
    }
}

--

Gerente.java

package Funcionarios;

import java.util.Objects;

public class Gerente extends Funcionario {
    private String senha;

    public Gerente(double salario) {
        super(salario);
    }

    public boolean autentica(String senha){
        return Objects.equals(this.senha, senha);
    }

    public double getBonificacao(){
        return this.salario;
    }
}
1 resposta

Oi Kauã! Tudo certo?

Com o protected era pra tudo compilar mesmo, agora usando o private deveria dar erro. Seu Intellij está com o mecanismos de exibir erros ativado? Acho que pode ser isso, porque deixei meu código igual ao seu (mudando só de protected para private) e apareceram os erros.

Uma outra coisa que você pode ter feito é, na hora de usar o private, ter deixado os atributos nome, cpf e salario na classe Gerente. Dessa forma, a classe entenderia que os atributos era dela e compilaria tudo normalmente. Tenta deixar só private no salario e vê se vai continuar compilando.

Fora isso, percebi que algumas coisas estão diferentes do professor no código, que não causaram tanta alteração: na classe Funcionario, seu método getBonificação usa um getSalario ao invés de um salário diretamente. E a classe Funcionário do professor não tem o atributo senha, são coisas tranquilas de trocar! ;)

Espero ter ajudado e estou à disposição! Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!