Ajuda com exercício! Herança, Polimorfismo, Construtor, Instanciamento

15 respostas
N

Nobres colegas programadores,

Tudo bem?
É a minha primeira vez postando aqui, e estou iniciando no curso de Sistemas para Internet agora. Começando a aprender java, então creio que vai ser fácil de cessar minhas dúvidas e, tomara, completarei meu exercício.
Sem mais demandas, vamos lá!

O exercício que eu estou com dúvidas pede o seguinte…

Cadastro de Produtos.

Os produtos a serem cadastrados são: Televisão, Dvd, Som, Notebook, etc.
O programa pede para o usuário cadastrar os produtos.
Logo após cadastrar, pede para que ele adicione algum dos produtos à cesta de compras. Nessa cesta temos de fazer o seguinte, se o produto estiver cadastrado, adicione. Caso contrário, volta.
Logo após, cadastrarmos, e adicionarmos à cesta. Temos de ver os produtos que foram escolhidos na cesta.

Não usarei BD. Estou usando ArrayList.

No próximo tópico colocarei os códigos pra não ficar muito grande.

15 Respostas

N

Olhem o que eu fiz?

Detalhe nas subclasses e na classe Super.

public class Produtos {

    public static Scanner leitor = new Scanner(System.in);
    private String nome;
    private String marca;
    private int cod;
    private double preco;

    public Produtos(int c, double p, String n, String m) {
        this.cod = c;
        this.preco = p;
        this.nome = n;
        this.marca = m;
    }
// getters e setters

public void exibirProduto() {
        System.out.println("\nCód: " + Integer.toString(cod) + "\nNome: " + nome + "\nMarca: " + marca + "\nPreço: " + Double.toString(preco));
    }

Minha Superclasse.

public class Televisao extends Produtos{
    
    private int polegadas;

// getter e setter
// e o método Sobrescrito do exibirProduto();

Não colocarei outras classe de produto para não estender tanto o código.

public class Cesta {
    private ArrayList<Produto> lista = new ArrayList<Produto>();
    
    public Cesta(){
    }
    
    public void inserirProduto(Produto p){
        lista.add(p);
    }
    
    public void listarProdutos(){
        for(int i=0;i<lista.size();i++){
            lista.get(i).exibirProduto();
        }
    }
}

Minha dúvida maior é onde eu faço o método cadastrarProdutos();
Eu tinha feito no Main, deu erro no construtor. Depois criei uma Classe CadastroDeProdutos() e fiz o seguinte:

public void cadastrarProduto() {

        System.out.println("Digite o nome do produto: ");
        String n = leitor.next();

        System.out.println("Digite a marca do produto: ");
        String m = leitor.next();

        System.out.println("Digite o codigo do produto: ");
        int c = leitor.nextInt();

        System.out.println("Digite o preço do produto: ");
        double p = leitor.nextDouble();

        Produtos prod = new Produtos(c, p, n, m);

        prod.setCod(c);
        prod.setMarca(m);
        prod.setPreco(p);
        prod.setNome(n);

    }

Dá erro no Construtor também.
Não sei o que eu faço!
Help-me.

fabiocortolan

Posta o erro q está ocorrendo.
Outra coisa, se vc está adicionando os dados no construtor, não precisa adicionar nos métodos, faz um ou outro:

// Aqui vc  add os dados do produto
Produtos prod = new Produtos(c, p, n, m);  

// Esses códigos são desnecessários, a não ser q vc não add no construtor
prod.setCod(c);  
prod.setMarca(m);  
prod.setPreco(p);  
prod.setNome(n);
N

Valeu. Seguinte, agora eu fiz isso que você disse. As variáveis do método int c = leitor.NextInt(); não estão sendo usadas. Mas agora é minha maior dúvida…
Quando eu peço pra colocar o nome do produto, eu queria que só pudesse ser os produtos específicos do problema, como: Televisão, notebook, Dvd, e Som.
Só poderia ser adicionado os 4!
No método que eu fiz, eu posso escrever qualquer abobrinha lá que vai dar certo.
Nâo tenho ideia de como fazer um método desses.
Abraços.

fabiocortolan

Nesse caso vc pode usar ENUM (acredito q seria o mais correto), porém na minha opinião é um assunto um pouco complexo e confuso, pelo menos p/ mim, ou vc pode verificar na hora da inserção se o texto inserido é igual a um dos produtos q vc precisa e caso não seja mostra uma mensagem d erro e descarta.
A segunda opção é bem mais simples d se fazer, porém, eu acho q utilizando ENUM seria mais “correto”.

N

Hehe. Eu nunca nem ouvi falar de ENUM.

Queria fazer um negócio tipo esse aqui…

Produtos tv = new Televisao();

Mas não dá certo.
Da erro nessa linha.

fabiocortolan

NaoSeiProgramar:
Hehe. Eu nunca nem ouvi falar de ENUM.

Queria fazer um negócio tipo esse aqui…

Produtos tv = new Televisao();

Mas não dá certo.
Da erro nessa linha.

Essa linha dá erro pq o construtor do produto possui parâmetros e vc não está preenchendo esses parâmetros quando instancia a classe Televisão. Nessa caso ou vc preenche esses parâmetros ao instanciar a classe Televisão ou cria um construtor padrão (sem parâmetros) para Produtos.

N

Mas aí não tem como eu usar a Herança…

Fellipex

Porquê você não preenche os parâmetros, pois toda televisão por herdar de produto, na teoria tem todos aqueles atributos , como marca, preço etc
Ou faz como o amigo falou em criar um construtor sem paramêtros para não precisar preenche-los

Valeu.

fabiocortolan

Fellipex:
Porquê você não preenche os parâmetros, pois toda televisão por herdar de produto, na teoria tem todos aqueles atributos , como marca, preço etc
Ou faz como o amigo falou em criar um construtor sem paramêtros para não precisar preenche-los

Valeu.

Só complementando, vc pode preencher os parâmetros da classe Televisão através d um construtor (como fez com Produtos) mas, ao invés de preencher as variáveis, vc chama o construtor de Produtos, ex:

public Televisao(int c, double p, String n, String m) {  
        super(c, p, n, m);
 }

Ou vc cria um construtor padrão para Produtos e preenche as variáveis utilizando “get e set”.

L

cria um swith case com apenas esses produtos que vc quer, e na pergunta c faria assim: QUE PRODUTO GOSTARIA DE INSERIR? ai o usuario escolheria o numero e quando ele escolher abriria a classe do protudo para ele insetir os dados e no final, vc perguntaria se ele vai querer adcionar mais coisa, caso ele queira se volta para perguna inicial, caso n, vc pergunta para confirma a finalização e em seguida vc exibe os produtos.

N

Vou tentar aqui, e a hora que eu chegar em casa eu respondo! Chego agora mesmo. Valeu pelas respostas por enquanto.

N

O meu método cadastrarProdutos(); está certo?

Como eu aumento esse método, haja visto que além dos atributos puxado da Superclasse a subclasse Televisao() tem o atributo polegadas.

Queria que quando eu abrisse também apareceria algo como: Quaantas polegadas tem ?
Entenderam ?

ribclauport

Uma forma bem simples de fazer isso é colocar o metodo na instancia, desta forma voce chama o metodo de TV, sendo assim se tiver outro produto vai ter outro comportamento na hora de cadastrar…

bem simples não?

N

Galera, obrigado à todos que ajudaram! Me ajudaram muito. Consegui aqui.

Abraços e ate´a próxima!!!

fabiocortolan

Não esqueça de marcar o tópico como [RESOLVIDO] blz! Flw.

Criado 22 de março de 2013
Ultima resposta 23 de mar. de 2013
Respostas 15
Participantes 5