Alteraçoes na classe principal

4 respostas
suportegarcia

Alguem poderia me ajudar a mudar cor desta casa somente da segunda pessoa criada, no caso p2.
já tentei de varias maneira, eu tenho uma classe (Casa=String endereço,cor) e outra (Pessoa=String nome,idade, Casa casa)

public class Residencia {

public void criarResidencia(){
    Casa c1 = new Casa();
    c1.setEndereco("Rua dos Anjos,51 - Centro");
    c1.setCor("Azul");
    c1.setMetrosQuadrados(300);
    
    Pessoa p1 = new Pessoa();
    p1.setNome("Garcia");
    p1.setIdade(23);
    p1.setCasa(c1);
    
    Pessoa p2 = new Pessoa();
    p2.setNome("Ligia");
    p2.setIdade(22);
    p2.setCasa(c1);

//Como mudar a cor aki ??
// p2.alteraCor(“Vermelho”); muda a cor de todas as pessoas. este método criei na classe pessoa.

Pessoa p3 = new Pessoa();
    p3.setNome("Romulo");
    p3.setIdade(24);
    p3.setCasa(c1);
    
     
    exibicao(p1);
    exibicao(p2);
    exibicao(p3);
}

public void exibicao(Pessoa pes){
    System.out.println("\nNome: "+pes.getNome()+"\nIdade: "+pes.getIdade()+"\nCasa: "+pes.getCasa());
    
}

public static void main(String[] args){
    Residencia testa = new Residencia();
    testa.criarResidencia();
    
}

}

4 Respostas

D

cara, antes de te dar algumas ideias de como pode resolver, vou te fazer uma pergunta, vc, olhando seu codigo, entende o porque quando tu muda a cor da casa de uma pessoa, acaba mudando a cor da casa de todos??

tendo entendido o porque disso já é um passo pra gente pensar na solução …

[]´s

suportegarcia

sim, porque quando eu mudo a cor da casa, estou mudando a cor referente ao objeto da Classe Casa e não da Classe Pessoa estou certo?

D

isso, e esse objeto casa que vc tem é o mesmo em todos os seus objetos pessoa, logo quando vc alterar qualquer coisa dele, automaticamente todas as pessoas vao ver essa alteraçao na sua casa, pois elas tem referencia ao mesmo objeto.

uma maneira de vc conseguir o q quer, seria por exemplo criar um metodo clone() no teu objeto Casa. Tipo assim:

//resto dos getter e setter e atributos da classe Casa aqui

public Casa clone(){
    Casa clone = new Casa();
    clone.setEndereco(this.getEndereco());
    clone.setCor(this.getCor());
    clone.setMetrosQuadrados(this.getMetrosQuadrados());
}

assim no momento que vc vai setar a casa nas pessoas, vc passa um clone pra elas, tipo assim::

//em vez de fazer isso que vc faz atualmente:
p1.setCasa(c1);

//vc faria isso:
p1.setCasa(c1.clone());

p2.setCasa(c1.clone());

dessa forma teoricamente quando vc for alterar algo da Casa de qualquer Pessoa, nao deve afetar a Casa das outras pessoas, isso prq cada pessoa terá uma referencia a um objeto diferente de Casa (instanciado no metodo clone())…

nao sei se essa é uma soluçao totalmente elegante, mas funciona… ve ae se serve pra vc

[]´s

suportegarcia

Muito obrigado, sua idéia me ajudou muito valeu…

Criado 27 de abril de 2009
Ultima resposta 28 de abr. de 2009
Respostas 4
Participantes 2