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

Modificadores Acesso - Exercício 3 - private Data dataRegistro

Bom dia pessoal! Fiz o exercício 3 criando os métodos getters and setters, porém estou com 2 dúvidas. Após conferir a resposta do exercício observei que na resposta Funcionario f1 = new Funcionario("hugo"); e também o campo data é instanciado aqui como f1.setDataEntrada(new Data(1,7,2000));

Porém em meu código a criação do objeto Funcionario não aceita parâmetro e a data também não é criada, o que posso estar fazendo errado ? Seguem minhas classes ( FuncionarioAula5 e testeFuncionarioAula5 )

class FuncionarioAula5{
    private String nome;
    private double salario;
    private Data dataRegistro;
    private String rg;
    private String nomeDaMae;
    private String nomeDoPai;
    public void recebeAumento(double valor){
        this.salario += valor;
    }    
    public double getGanhoAnual(){
        return this.salario * 12;
    }    
    public void mostra(){
        System.out.println("Nome .: "+this.nome);
        System.out.println("Salário .: "+this.salario);
        System.out.println("Data Registro .: "+this.dataRegistro.getFormatada());
        System.out.println("RG .: "+this.rg);
        System.out.println("Nome da Mae .: "+this.nomeDaMae);
        System.out.println("Nome do Pai .: "+this.nomeDoPai);
    }

    public void setNome(String nomeRecebido){
        this.nome = nomeRecebido;
    }
    public String getNome(){
        return this.nome;
    }

    public void setSalario(double novoSalario){
        this.salario = novoSalario;
    }
    public double getSalario(){
        return this.salario;
    }

    public void setDataRegistro (Data dataRegistro){
        this.dataRegistro = dataRegistro;
    }
    public Data getDataRegistro(){
        return this.dataRegistro;
    }

    public void setRG(String rg){
        this.rg = rg;
    }
    public String getRG(){
        return this.rg;
    }

    public void setNomeDaMae(String nomeDaMae){
        this.nomeDaMae = nomeDaMae;
    }
    public String getNomeDaMae(){
        return this.nomeDaMae;
    }

    public void setNomeDoPai(String nomeDoPai){
        this.nomeDoPai = nomeDoPai;
    }
    public String getNomeDoPai(){
        return this.nomeDoPai;
    }
}

Classe testeFuncionarioAula5 :

class testeFuncionarioAula5{
    public static void main(String args[]){
        FuncionarioAula5 f1 = new FuncionarioAula5();
        f1.setNome("Jose Leandro Vieira");
        f1.setSalario(1000);
        f1.setRG("22.222.222.2");
        f1.setNomeDaMae("Teresa");
        f1.setNomeDoPai("Joao");
        f1.setDataRegistro(new Data(1, 7, 2014));

        f1.mostra();
    }
}
8 respostas

O código da resposta deste exercício tem as seguintes operações que me deixaram em dúvida. Funcionario f1 = new Funcionario("hugo");Se eu tentar instanciar um funcionário assim o meu código da erro achei estranho pois a classe funcionário tem o método setNome que receberá o nome e irá setá-lo normalmente, porém como vi este procedimento fiquei em dúvida quanto a sua aplicação, ou mesmo se é possível que funcione.

Quanto a data se eu fizer da seguinte forma irá funcionar :

dt1 = new Data();
dt1.preencheData(1,7,2000);
f1.setDataRegistro(dt1);

Porém o código da resposta instancia a data diretamente passando os parâmetros, por isso fiquei em dúvida :

f1.setDataRegistro(new Data(1, 7, 2000));

Se alguém puder me esclarecer estas dúvidas eu agradeço. Obrigado.

Vc não consegue instanciar um funcionário passando parâmetros pq vc não criou um construtor que recebe parametros

public FuncionarioAula5(String nome) {
  this.nome = nome;
}

quanto a data vc pode instanciar um parâmetro no momento que chama o método sem problema.

Melhor dizendo:

public FuncionarioAula5 {
   public FuncionarioAula5(String nome) {
       this.nome = nome;
   }
}

Obrigado pela resposta Ian. Entendi a inicialização do nome, porém da data ainda não entendi.

José a classe data não tem um método preencheData. Ela tem uma sobrecarga de construtores sendo que um desses construtores recebem 3 parametros int.

no caso:

new Data(1, 2, 2000);

Ian obrigado mais uma vez. Eu acho que é ai que está o meu problema, segue o meu código da classe Data()

class Data{
    int dia;
    int mes;
    int ano;

    void preencheData(int dia, int mes, int ano){
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }

    String getFormatada(){
        return this.dia+"/"+this.mes+"/"+this.ano;
    }
}

Você poderia me passar o código correto, eu não sei como trabalhar com sobrecarga de construtores ainda, no caso recebendo 3 parametros int.

Valeu.

solução!

José, você consegue executar o código dt1.preencheData(1,7,2000); porque na sua classe Data tem o método:

void preencheData(int dia, int mes, int ano){
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }

porém você não consegue fazer f1.setDataRegistro(new Data(1, 7, 2000));porque você não tem um construtor com três parâmetro int.

toda classe quando criada possui um construtor padrão(sem argumentos), implicitamente. A sua classe Data possui o construtor public Data(){}, por isso você consegue fazer: Data dt1 = new Data(); mas você pode criar n construtores na sua classe com diferentes assinaturas, isto é; diferentes quantidades ou ordem de parâmetros. public Data(int dia){}, public Data(String qualquerCoisa){}... isso é sobrecarga. Para que seu código funcione como espera você tem que criar o construtor:

public Data(int dia, int mes, int ano){
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }

só lembrando, quando você cria um construtor com sobrecarga, o seu construtor default(implícito) deixa de funcionar, ou seja, você não pode mais criar um objeto Data sem passar parâmetros. Para resolver isso basta adicionar também um construtor sem parâmetros, para poder instanciar objetos Data tanto assim new Data(), quanto assim new Data(1, 7, 2000)

Desculpe josé eu tinha confundido a classe data com a classe Date da api JAVA.

Então vamos reformular... sua classe data tem o método preenche data porém não tem um construtor que recebe 3 parâmetros inteiros para preencher a data.

Quando falo de sobrecarga de construtores eu me refiro a vc ter diversos tipos de construtores para uma classe. Por exemplo um que não recebe parâmetro, outro que recebem 2 parâmetros, outro que recebe três parâmetros e assim por diante.