Duvida na criação de objeto

9 respostas
niggazflavors

Boa tarde galera,
estou com uma duvida no momento da criação de um objeto do tipo Endereco(outra classe).

Seguinte:

tenho a classe Endereco

package hotel.model;
public class Endereco {

	private String logradouro;
	private String tipo;
	private String cidade;
	private String estado;
	private int numero;
	private String complemento;
	
	public Endereco (String pTipo, String pLogradouro, int pNumero, String pCidade, String pEstado, String pComplemento)
	{
		this.tipo = pTipo;
		this.logradouro = pLogradouro;
		this.numero = pNumero;
		this.cidade = pCidade;
		this.estado = pEstado;
		this.complemento = pComplemento;
	}
	
	public String toString()
	{
		String end = "Logradouro : " + logradouro + "\nTipo : " + tipo + "\nCidade : " + cidade + "\nEstado : "
		+ estado + "\nNumero : " + numero + "\nComplemento : " + complemento;
		return end;
	}
}

Que será utilizada por outra classe Cliente:

package hotel.model;

public class Cliente {
	
	private String nome;
	private String  cpf;
		
	public Cliente(String pNome, String pCpf, Endereco pEndereco)
	{
		this.nome = pNome;
		this.cpf = pCpf;
	}
	
	public String toString()
	{
		String cliente = "Nome : " + nome + "\nCPF : " + cpf;
		return cliente;
	}
}

Na Cliente, o construtor tem q conter um endereco...porém eu nao sei como criar um objeto desse tipo na classe Cliente...
:cry:
E a estrutura tem q ser exatamente essa ae, nao pode ter mais privados, e o construtor nao pode ser alterado

Como fazer isso?
[]'s

9 Respostas

gpd38
//Codigo foi apagado para nao atrapalhar no debate do forum(Master)
wbdsjunior

se entendi direito, na classe que você for instanciar um novo cliente, é só instanciar um endereço antes do cliente, e passar o endereço no construtor…

assim:

Endereco endereco = new Endereco("rua", "um", 21, ...); Cliente cliente = new Cliente("Tiozinho", "[telefone removido]", endereco);

wariows

gpd38:
Nao tenho certza, mas talves com um extendes vc consiga fazer isso

. . .
class Cliente extends Endereco{

//acho que aqui vc tera que implementar alguns metodos da classe enderco

De uma olhada sobre como usar extends

}

Isso é errado, visto que um Cliente não é um Endereço!
Um Cliente TEM um Endereço!

Não é necessário instaciar um Endereco, visto que este já é passado para o construtor de Cliente.

Apenas adicione um atributo do tipo Endereço ao Cliente e faça este atributo receber o passado por parametro para o construtor…

joaorafael

Na tua Classe Cliente é só vc criar um atributo Endereco.

Ex:

public class Cliente {   
       
    private String nome;   
    private String  cpf;   
    private Endereco endereco;
       
    public Cliente(String pNome, String pCpf, Endereco pEndereco,String pTipo, String pLogradouro, 
                           int  pNumero, String pCidade, String pEstado, String pComplemento)   
    {   
        this.nome = pNome;   
        this.cpf = pCpf; 
        this.endereco =   new Endereco (String pTipo, String pLogradouro, int pNumero, String pCidade, String  
                                                              pEstado, String pComplemento) ;
    }   
    
    public Cliente(String pNome, String pCpf, Endereco pEndereco){
         this.nome = pNome;
         this.cpj = pCpf; 
         this.endereco = pEndereco;
    }
       
    public String toString()   
    {   
        String cliente = "Nome : " + nome + "\nCPF : " + cpf;   
        return cliente;   
    }   
}

Na tua Classe vc pode ter este dois construtores ou mais.
No Primeiro construtor da Classe vc passa todos os parametros do Cliente e Cria a classe endereco dentro do Cliente.
No Segundo vc ja passa o Endereco criado para ele.
Ai vc tem que ver qual é a melhor opção para vc.

wariows

Assim:

package hotel.model;

public class Cliente {
	
	private String nome;
	private String  cpf;
        private Endereco endereco;
		
	public Cliente(String pNome, String pCpf, Endereco pEndereco)
	{
		this.nome = pNome;
		this.cpf = pCpf;
		this.endereco = pEndereco;
	}
	
	public String toString()
	{
		String cliente = "Nome : " + nome + "\nCPF : " + cpf + "\nEndereço: " + endereco;
		return cliente;
	}
}

Deste modo, a classe responsável por instanciar Cliente, também instaciará (ou não) e passará o endereço para o construtor de Cliente.

Editado: O cara aí em cima foi mais rápido :wink:

wbdsjunior

joaorafael:
Na tua Classe Cliente é só vc criar um atributo Endereco.

Ex:

public class Cliente {   
       
    private String nome;   
    private String  cpf;   
    private Endereco endereco;
       
    public Cliente(String pNome, String pCpf, Endereco pEndereco,String pTipo, String pLogradouro, 
                           int  pNumero, String pCidade, String pEstado, String pComplemento)   
    {   
        this.nome = pNome;   
        this.cpf = pCpf; 
        this.endereco =   new Endereco (String pTipo, String pLogradouro, int pNumero, String pCidade, String  
                                                              pEstado, String pComplemento) ;
    }   
    
    public Cliente(String pNome, String pCpf, Endereco pEndereco){
         this.nome = pNome;
         this.cpj = pCpf; 
         this.endereco = pEndereco;
    }
       
    public String toString()   
    {   
        String cliente = "Nome : " + nome + "\nCPF : " + cpf;   
        return cliente;   
    }   
}

Na tua Classe vc pode ter este dois construtores ou mais.
No Primeiro construtor da Classe vc passa todos os parametros do Cliente e Cria a classe endereco dentro do Cliente.
No Segundo vc ja passa o Endereco criado para ele.
Ai vc tem que ver qual é a melhor opção para vc.

exato! esqueci de dizer que você precisará do atributo endereco na classe cliente…

lucas_montanari

Juntamente com os outros amigos que responderam eu não entendi muito bem o que vc perguntou mas vamo la

Sua classe Cliente JÁ POSSUI UM ENDEREÇO, isso porque vc declarou uma váriavel referenciando Endereço.

Agora se vc quer INSTANCIAR um objeto de endereço dentro da classe Cliente, o que não é feito geralmente vc, faria:

public void meuMetodoNaoComum() { Endereco endereco = new Endereco("rua", "um", 21, ...); }

Eu digo que não é comum porque em sua classe vc fez certinho, sua classe Cliente recebe um endereço em seu construtor, ou seja, ela guarda um objeto já instanciado… Quando alguem dá um new em Cliente, já espera-se algo do tipo:

Endereco endereco = new Endereco("rua", "um", 21, ...);
     Cliente cliente = new  Cliente ( "Batman, "[telefone removido]", endereço);

Melhore seu código para que Cliente guarde um endereço, faça da seguinte forma:

public Cliente(String pNome, String pCpf, Endereco pEndereco) { this.nome = pNome; this.cpf = pCpf; this.endereco = pEndereco; }

Ah, o que nosso amigo gpd38 disse não vem ao caso, porque extender uma classe é outra coisa…

lucas_montanari

é os caras foram rapidos na escrita

:lol:

niggazflavors

Ae galera, ta rolando! :smiley:
Muito obrigado pela ajuda…sou leigo ainda em java, estou tentando melhorar…rs

Vou vou fazer os JUnit pra testar…ja ja eu volto…rs

[]'s

Criado 16 de setembro de 2008
Ultima resposta 16 de set. de 2008
Respostas 9
Participantes 6