1
resposta

[Projeto] Desafio: hora da prática

// Classe base Produto

class Produto {
    private String nome;
    private double preco;
    private int quantidade;

    // Construtor padrão
    public Produto() {
    }

    // Construtor com parâmetros (modificação solicitada)
    public Produto(String nome, double preco, int quantidade) {
        this.nome = nome;
        this.preco = preco;
        this.quantidade = quantidade;
    }

    // Métodos getters e setters
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public double getPreco() {
        return preco;
    }

    public void setPreco(double preco) {
        this.preco = preco;
    }

    public int getQuantidade() {
        return quantidade;
    }

    public void setQuantidade(int quantidade) {
        this.quantidade = quantidade;
    }

    // Implementação do toString() (requisito)
    @Override
    public String toString() {
        return "Produto{" +
                "nome='" + nome + '\'' +
                ", preco=" + preco +
                ", quantidade=" + quantidade +
                '}';
    }
}

// Classe ProdutoPerecivel que herda de Produto
class ProdutoPerecivel extends Produto {
    private Date dataValidade;

    // Construtor utilizando super() (requisito)
    public ProdutoPerecivel(String nome, double preco, int quantidade, Date dataValidade) {
        super(nome, preco, quantidade);
        this.dataValidade = dataValidade;
    }

    // Getter e setter para dataValidade
    public Date getDataValidade() {
        return dataValidade;
    }

    public void setDataValidade(Date dataValidade) {
        this.dataValidade = dataValidade;
    }

    // Sobrescrita do toString() para incluir dataValidade
    @Override
    public String toString() {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        return "ProdutoPerecivel{" +
                "nome='" + getNome() + '\'' +
                ", preco=" + getPreco() +
                ", quantidade=" + getQuantidade() +
                ", dataValidade=" + sdf.format(dataValidade) +
                '}';
    }
}

public class Main {
    public static void main(String[] args) {
        // Criando ArrayList de Produtos
        ArrayList<Produto> listaProdutos = new ArrayList<>();

        // Adicionando produtos usando o construtor com parâmetros
        listaProdutos.add(new Produto("Arroz", 5.99, 50));
        listaProdutos.add(new Produto("Feijão", 7.50, 40));
        listaProdutos.add(new Produto("Açúcar", 3.20, 30));

        // Imprimindo o tamanho da lista (requisito)
        System.out.println("Tamanho da lista: " + listaProdutos.size());

        // Recuperando um produto pelo índice (requisito)
        Produto produtoRecuperado = listaProdutos.get(1);
        System.out.println("Produto no índice 1: " + produtoRecuperado);

        // Imprimindo a lista de produtos usando toString() (requisito)
        System.out.println("\nLista de produtos:");
        System.out.println(listaProdutos);

        // Criando um ProdutoPerecivel (requisito)
        Date dataValidade = new Date(System.currentTimeMillis() + (1000L * 60 * 60 * 24 * 30)); // 30 dias no futuro
        ProdutoPerecivel produtoPerecivel = new ProdutoPerecivel("Leite", 4.75, 20, dataValidade);

        // Imprimindo o produto perecível
        System.out.println("\nProduto Perecível:");
        System.out.println(produtoPerecivel);
    }
}
1 resposta

Oi, Eleazar! Como vai?

Sua implementação está clara e bem estruturada, com uso adequado de herança, construtores com parâmetros e a sobrescrita do método toString(), o que facilita bastante a leitura dos objetos no console. A ideia de adicionar um ProdutoPerecivel com Date foi bem aplicada e cumpre os requisitos propostos na atividade.

Uma dica interessante para o futuro é usar LocalDate no lugar de Date, pois ele faz parte da API moderna de datas do Java e oferece mais segurança e funcionalidades:


import java.time.LocalDate;

LocalDate validade = LocalDate.now().plusDays(30);
System.out.println(validade);

Esse trecho cria uma data com 30 dias à frente da atual. O LocalDate evita problemas de fuso horário e é recomendado em novos projetos.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!