Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Desafio: hora da prática e dúvida.

Segue minha resolução com Obs no final:

Produtos:

public class Produtos {
   String nome;
   int quantidade;
   double preco;

   public Produtos(String nome, int quantidade, double preco){
      this.nome = nome;
      this.preco = preco;
      this.quantidade = quantidade;
   }

   @Override
   public String toString() {
      return "Nome: "+ nome + ", Preço: "+ preco + ", Quantidade: "+ quantidade+ "\n";
   }
}

ProdutoPerecivel:

public class ProdutoPerecivel extends Produtos{
    String dataDeValidade;

    public ProdutoPerecivel(String nome, int quantidade, double preco, String dataDeValidade) {
        super(nome, quantidade, preco);
        this.dataDeValidade = dataDeValidade;
    }

    @Override
    public String toString() {
        return super.toString() + ", Data de validade: "+ dataDeValidade;
    }
}

Main:

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
            ArrayList<Produtos> produtos = new ArrayList<>();
            produtos.add(new Produtos("Abajur",1, 45.60));
            produtos.add(new Produtos("Monitor",1, 999.90));
            produtos.add(new Produtos("Gaiola",2,75));
            produtos.add(new ProdutoPerecivel("Maça",1,2.50,"19/03"));
            produtos.size();
        System.out.println("Primeiro item do carrinho: \n"+ produtos.get(2));
        System.out.println(produtos.toString());

    }

}

OBS: Tive que quebrar um pouco a cabeça para saber como que poderia criar um item direto de um objeto, mas pesquisei e deu tudo certo. Umas dúvidas eu ainda não to conseguindo direito saber as funcionalidades do toString ele é como se fosse um sout porém para objetos? E quando usar o this/super.

E quando colocar o que está em vermelho na imagem a baixo, não só em Object mas em outros casos.:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

E tbm o caso dos Arrays, no exercicío acima eu dispensei o uso de get/set, pois imaginei que os objetos fariam o trabalho deles, certo? E não invoquei a classe produtos como fazia usando Produtos produto = new... pelo oq eu percebi o próprio Array já invoca a classe estou correto? E o return? quando eu uso ou modifico oq retorna.. oq eu posso fazer para saber a hora de mudar para outra coisa ex:. return "Exemplo "+ conta.banco; se puder gostaria de ver uns exemplos para eu entender onde e oq fazer...

1 resposta
solução!

Olá, Eduardo. Tudo bem?

Muito obrigado por compartilhar o seu código aqui com a gente. Parabéns pelo trabalho. Continue com essa dedicação.

Ótimo como você estruturou suas classes e organizou os produtos no ArrayList. Sua implementação do toString() ajuda bastante na visualização dos objetos quando impressos no console.

O método toString() funciona como uma forma de representar um objeto em texto. Sempre que um objeto é passado para um System.out.println(), o Java chama automaticamente o toString() se ele estiver sobrescrito na classe. Veja este exemplo simplificado:


class Exemplo {
    int valor;
    
    public Exemplo(int valor) {
        this.valor = valor;
    }

    @Override
    public String toString() {
        return "Valor armazenado: " + valor;
    }
}

public class Main {
    public static void main(String[] args) {
        Exemplo ex = new Exemplo(10);
        System.out.println(ex); // Chama automaticamente o toString()
    }
}

O uso de this se refere ao próprio objeto da classe, enquanto super acessa membros da classe pai. No seu código, super.toString() chama a versão do método definida em Produtos antes de adicionar a dataDeValidade.

Sobre os getters e setters, como você está acessando diretamente os atributos, não precisa deles agora, mas em projetos maiores, encapsular os atributos com private e acessá-los via métodos é uma boa prática.

Conte com o apoio do Fórum. Bons estudos.