Construtores acesso aos parâmetros

4 respostas
L

Bom dia, estou iniciando nesta e não achei nenhum post que me ajudasse nesta questão então segue a dúvida,

obs: Base exercício 6.8 apostila jf11.

Foram criados dois construtores um sem argumentos e outro com, porém ao criar um metodo para exibir as informações o mesmo mostra o último nome informado para os dois objetos.

class Funcionario {

//construtor vazio, da a possibilidade de não iformar o user

public Funcionario (){	

Funcionario.identificador ++; //contador ok

}

//construtor que recebe o nome o nome do Funcionário, ao criar o objeto.

public Funcionario (String nome){

this.nome = nome;

Funcionario.identificador ++;

}
static int identificador=0; // utilizado para criar o identificador único dos funcionários
static String nome;
public String getNome(){

return this.nome;

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

void mostra(){
	System.out.println("Nome: "+this.getNome()+	
			"\n Depto: "+this.depto+
			"\n Data Ini: "+this.dataAdm.dia+"/"+this.dataAdm.mes+"/"+this.dataAdm.ano+
			"\n Salário: "+this.salario+
			"\n RG: "+this.rg);
}

}

Segue a classe de teste

public class TesteFuncionario {

public static void main (String [] args){

Funcionario bcofunc;

Funcionario bcofunc1;
bcofunc = new Funcionario("Jose");
	bcofunc1 = new Funcionario("Mario");

        bcofunc.mostra();
	bcofunc1.mostra();

}
}

//result - saída

Nome: Mario
Nome: Mario

Poderiam me dizer o que faltou?

4 Respostas

wbdsjunior
isso ocorre porque você criou o atributo nome da classe Funcionario utilizando o modificador static.
class Funcionario {
    ...
    static String nome; // aqui

    public String getNome(){ 
        return this.nome; 
    } 
    ...
}
[url=]http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html]Understanding Instance and Class Members[/url]. para ver o resultado esperado tente:
public class TesteFuncionario {

    public static void main(String[] args) {
        Funcionario bcofunc;
        bcofunc = new Funcionario("Jose");
        bcofunc.mostra();

        Funcionario bcofunc1;
        bcofunc1 = new Funcionario("Mario");
        bcofunc1.mostra();
    }
}
rodrigues_sis

leafarsamar,

conforme dito pelo wbdsjunior, o erro está no static do nome… como é sabido o modificador static definiria nome como variavel da classe, e nao do objeto.

L

No construtor só posso trabalhar com parâmetros static, correto? Senão poderia deixar no formato que estava?

L

Entendio srs, muito obrigado. Achei que o parâmetro para o construtor deveria sempre ser estático, mas depende do uso, o identificador ai faz sentido ser estático mas o nome não.

Criado 5 de dezembro de 2012
Ultima resposta 5 de dez. de 2012
Respostas 4
Participantes 3