Duvido em extend um objeto em outro objeto?

A minha duvida é em saber se esta correto fazer o seguinte, tenho um cadastro de cliente e neste cadastro tenho o endereco dele, endereco de entrega e endereço de cobrança, ai fiz o seguinte:

public class Endereco {
      private String endereco;
      private String numero;
      private String bairro;

      /// aqui os gets e sets
}
public class Cliente {
     private int codigoID;
     private int codigo;
     private String cNome;

     private Endereco endereco;

     private Endereco cobranca;

     private Endereco entrega;

      /// aqui os gets e sets

}

Isso é correto, tem algum prejuízo em desempenho ?

Boa tarde kenew,

Seria interessante se o cliente tivesse uma lista de endereço e na entidade endereço você classificar o tipo de endereço.

Cliente  -> ListEndereco
Endereco -> TipoEndereco
3 curtidas

Bom dia Weverton,

Pode dar mais detalhes ?

Uma outra coisa, esta entidade endereço eu uso para varias outras como fornecedor, funcionarios, representante, terceiros e etc.

Vlw

Seguindo a ideia do @Weverton_Reis eu faria da seguinte forma:

public class Endereco {
    private String endereco;
    private String numero;
    private String bairro;
    /**************************************
     Forma simples de diferenciar:
     * 0 = endereço normal
     * 1 = endereço de entrega
     * 2 = endereço de cobrança
     **************************************/
    private int tipo_do_endereco;
    
    //gets e sets    
    
}

ai o cliente seria:

public class Cliente {

    private int codigoID;
    private int codigo;
    private String cNome;
    /*Lista de endereco*/
    private List<Endereco> enderecos;

    public Cliente() {
        this.enderecos = new ArrayList<>();
    }
    
    public List<Endereco> getEnderecos(){
        return this.enderecos;
    }
    //gets e sets dos demais
}

ai no main principal faria algo desse tipo:

public static void main(String[] args) {
        Cliente cliente = new Cliente();
        /*método que retorna o tipo do endereco*/
        int tipo_do_endereco = cliente.getEnderecos().get(0).getTipo_do_endereco();
    }

eu também faria isso só para deixar explícito:

public class Endereco {
    private String endereco;
    private String numero;
    private String bairro;

    public static final int NORMAL = 0;
    public static final int ENTREGA = 1;
    public static final int COBRANCA = 2;

    private int tipo_do_endereco;
    
    //gets e sets    
    
}

e poderia fazer algo assim:

public static void main(String[] args) {
        Cliente cliente = new Cliente();
        /*método que retorna o tipo do endereco*/
        int tipo_do_endereco = cliente.getEnderecos().get(0).getTipo_do_endereco();

        if (tipo_do_endereco == Endereco.ENTREGA) {
            //então é o endereço de entrega
        }
    }

Legal, entendi agora !

Vlw pela explicação

Boa noite, kenew!

A vantagem de usar essa forma abaixo, é o fato de criar objetos com cada tipo de endereço, que no caso são: endereço do cliente, endereco de entrega e endereço de cobrança.

/*Como Endereco é uma classe abstrato(abstract) não poderá
criar objetos com ela, só com
as outras classes que à estedem
public class abstract Endereco{
private String endereco;
*/
public class abstract Endereco{
   String endereco; // Essa variávem conterá em todas as classes que estendê-la
    Endereco(String endereco){ //Construtor para a classe
	    this.endereco = endereco;
   }
}

//

// Assim criará um obj para cada tipo de endereço
public class extends EnderecoDoCliente{

    EnderecoDoCliente(String endereco){
        super(endereco); // coloque o endereço da entrega do cliente
    }
    //corpo da classe (resto do código abaixo)
}

//

public class extends EnderecoEntrega{
    EnderecoEntrega(String endereco){
       super(endereco); // coloque o endereço da entrega
        //corpo da classe (resto do código abaixo)
    }
}

//

public class extends EnderecoCobranca{
    EnderecoCobranca(String endereco){
        super(endereco); // coloque o endereço da cobrança
        //corpo da classe (resto do código abaixo)
    }
}