Ajuda sobre estender uma classe

Gostaria de uma sugestão, eu tenho uma classe de itens de venda, nesta classe tem métodos dos produtos assim como impostos e umas particularidades, também tenho movimento de estoque, com alguns métodos dos produtos e tenho outras classe que também tem métodos dos produtos, como poderia fazer para pegar só a parte de produtos sempre que precisar?

Exemplo:

class ItensVenda extend Produtos {

}

class MvtoEstoque extend Produtos {

}

Produto prd = ItensVenda();

Produto prd = MvtoEstoque();

Não sei se consegui me fazer entender?

Mano, não sou especialista, mas acredito que você está fazendo as coisas de modo errada. O que você deveria fazer não é exetender a classe produto, mas sim criar variaveis na classe itemVenda do tipo produto.

ex:

private produto nome;
private produto preco;

algo assim.

Bom isso é um mau designer de classe, porque Itens de Venda não deve herdar de Produtos, mas, sim Itens de Venda conter Produtos e isso também em movimentação do Estoque.

Na minha visão como desenvolvedor e experiências isso que você está tentando fazer é totalmente errado.

Entendo, tbm pensei em fazer como o Jean_dos_Santos citou, mas tbm nao sei se é correto, por isso a pergunta

Uma dica pra você saber se deve estender uma classe você deve se perguntar:

  • Um Movimento de Estoque é um Produto?
  • Um Item de Venda é um Produto?

Ou seja sempre pergunte se UmaCoisa é OutraCoisa?
Se for, então UmaCoisa extends OutraCoisa?

1 curtida

Bem, o certo seria se voce inicializasse o tipo da instancia de produto com o “new”:
produto prd = new itensvenda (), agora pra selecionar partes específicas aí o ideal seria um design pattern ( padrão de projeto) chamado Builder, de construir do ingles, eu acho. O Builder é isso, separar a construção de um objeto de sua instância. Não sou um especialista nisso, mas o ideal é pra se instanciar formas diferentes do mesmo objeto é com o Builder.

Ex: produto tem nome, preço e codigo, eu poderia criar campos pra ler os atributos acima, e no final: produto p = criarProduto.nome().builder
produto p = criarProduto.nome().codigo ().builder;

e por aí vai, com o buider eu controlo quais atributos diferentes usar ao construir um objeto, os que o objeto tiver e nao usar, fica nulo