Classe Main.Java:
package br.com.alura.listasdesafio2;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
//Cria uma lista de objetos do tipo Produto
ArrayList<Produto> produtos = new ArrayList<>();
//Instancia e inicializa objetos do tipo Produto
Produto produto1 = new Produto("Arroz", 20.60, 500);
Produto produto2 = new Produto("Feijão", 16.60, 325);
Produto produto3 = new Produto("Café", 20.60, 123);
//Adiciona os objetos acima criados, na lista de produtos
produtos.add(produto1);
produtos.add(produto2);
produtos.add(produto3);
//Printa o tamanho da lista utilizando formatted e passando como parâmetro o método size() que retorna int
System.out.println("Tamanho da lista de produtos: %d".formatted(produtos.size()));
//Utiliza for each pra percorrer toda a lista, atribuindo os objetos dela a um objeto do tipo Produto, chamado produto
for(Produto produto : produtos){
System.out.println(produto);
}
//Instancia e inicializa objetos do tipo ProdutoPerecivel utilizando o construtor da superclasse junto a mais um atributo anoValidade
ProdutoPerecivel produtoPerecivel1 = new ProdutoPerecivel("Manteiga", 15.39, 30, 2026);
System.out.println(produtoPerecivel1);
}
}
Classe-mãe Produto:
package br.com.alura.listasdesafio2;
public class Produto {
//Atributos
private String nome;
private double preco;
private int quantidade;
//Construtores cheio e vazio
public Produto(String nome, double preco, int quantidade) {
this.nome = nome;
this.preco = preco;
this.quantidade = quantidade;
}
public Produto() {}
//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;
}
//Sobrescrita do método toString() herdado de Object
@Override
public String toString() {
return "Nome: %s | Preço: %.2f | Quantidade: %d".formatted(this.nome, this.preco, this.quantidade);
}
}
Classe-filha ProdutoPerecivel:
package br.com.alura.listasdesafio2;
public class ProdutoPerecivel extends Produto{
//Atributos
private int anoValidade;
//Construtor cheio de produto perecivel. Como esta Classe é filha de Produto, então é necessário usar o construtor da Classe-mãe
public ProdutoPerecivel(String nome, double preco, int quantidade, int anoValidade) {
//Utiliza o construtor da Classe-mãe, passando os parâmetros recebidos
super(nome, preco, quantidade);
//Atribui o valor recebido no construtor ao atributo. Como esse atributo é uma especificidade desta Classe, a atribuição não passa por super
this.anoValidade = anoValidade;
}
//Getters e Setters
public int getAnoValidade() {
return anoValidade;
}
public void setAnoValidade(int anoValidade) {
this.anoValidade = anoValidade;
}
}