Ajuda a resolver questao, URGENTE

Tenho essa questao

  1. Desenvolver um programa para um comércio utilizando os conceitos de orientação a objetos (É obrigatório o uso de herança). O programa deve contemplar as seguintes características:
  • O comércio deve ter como atributos seu nome e seu CNPJ.
  • O comércio deve possuir um estoque com dois tipos de produtos: perecíveis e não perecíveis. Os produtos têm em comum um nome, descrição e preço. Produtos perecíveis devem ter data de validade e os não perecíveis uma marcação indicando se são recicláveis ou não.
  • É possível adicionar novos produtos ao estoque e classificá-los em uma das categorias.
  • Após a venda do produto, este deve ser excluído do estoque.
  • Deve fornecer uma funcionalidade para atualizar as informações dos produtos.
  • É possível ajustar o preço dos produtos de forma geral ou considerando sua categoria específica

ja criei as classes:

package comercio;

public class Supermercado {

private String nome = "Robson Market";
private String Cnpj = "11223344/0001-42";


public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}
public String getCnpj() {
	return Cnpj;
}
public void setCnpj(String cnpj) {
	Cnpj = cnpj;
}

public static void main(String[] args) {
	

	
}

}

public class CriarProduto {

public static void main(String[] args) {
	
	Produtos produto = new Produtos();

	  produto.codigo = 1;
	  produto.nome = "refrigerante";
	  produto.preco = 2.0;

	  System.out.println("código do produto: " + produto.codigo);
	  System.out.println("nome do produto: " + produto.nome);
	  System.out.println("valor do produto " + produto.preco);

	  Produtos produto2 = new Produtos();

	  produto2.codigo = 2;
	  produto2.nome = "suco";
	  produto2.preco = 1.0;

	  System.out.println("código do produto: " + produto2.codigo);
	  System.out.println("nome do produto: " + produto2.nome);
	  System.out.println("valor do produto " + produto2.preco);

	 }
	}

package comercio;

import java.util.Date;
import javax.swing.JOptionPane;

public class Produtos {

public String nome;
public String descricao;
public Date dataValidade;
public double preco;
public int codigo;


public String getNome() {
	return nome;
}

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

public String getDescricao() {
	return descricao;
}

public void setDescricao(String descricao) {
	this.descricao = descricao;
}

public Date getDataValidade() {
	return dataValidade;
}

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

public double getPreco() {
	return preco;
}

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

public int getCodigo() {
	return codigo;
}

public void setCodigo(int codigo) {
	this.codigo = codigo;
}


private void exibirProdutos() {
	JOptionPane.showMessageDialog(null,"Nome do produto: " + nome + "\nDescricao: " + descricao + "\nData de Validade: " + dataValidade + "\nValor do Produto: " + preco);
	
}

}
Mas nao sei se ta certo e como termina Alguem me help please!!!

O nome dessa class deveria ser no singular pois cada objeto dela representa um único produto.

Se tem método get e set então esses atributos deveriam ser private.

O enunciado obriga a usar herança, neste caso eu faria Produto ser uma classe abstrata e criaria duas subclasses: Perecivel e NaoPerecivel.

Saudações amigo, essa hierarquia é simples!

A classe PRODUTO deve ser uma classe PAI FINAL para ser herdada e deverá ter os seguintes atributos:

  • Nome.
  • Descrição
  • Preço
  • Estoque
    Esses atributos são base para qualquer tipo de produto.

Agora crie uma classe ProdutoPerecível, e adicione o atributo DataValidade e algum outro se tiver.
E crie uma classe de ProdutoNão Perecível.

Herde esses duas classes da classe PRODUTO.

  • CRIE UMA FUNÇÃO DE CADASTRO NA CLASSE PAI PRODUTO, e REESCREVA ELA APENAS NA CLASSE PRODUTO PERECÍVEL, POIS É A ÚNICA QUE PRECISARÁ DE UM ATRIBUTO A MAIS → DATA DE VALIDADE.

Se for final não pode ser classe pai pois classes final não podem ser estendidas.

Certo, criei essa classe, mas essa outra parte nao entendi de classe abstrata e herança , nao foi ensinado muito bem no curso , vou tentar estudar agora nas ferias pra coseguir entender, muito confuso pra mim,

import java.time.LocalDate;

public class ProdutoPerecivel {

private LocalDate validade;
private boolean refrigerado;

public LocalDate getValidade() {
    return validade;
}

public void setValidade(LocalDate validade) {
    this.validade = validade;
}

public boolean getRefrigerado(){
    return refrigerado;
}

public void setRefrigerado(boolean refrigerado) {
    this.refrigerado=refrigerado;
}

private String getValorUnitario() {
	return null;
}

private String getNome() {
	return null;
}

private String getCodigo() {
	return null;
}


public void Perecivel(LocalDate validade, boolean refrigerado) {
    this.validade = validade;
    this.refrigerado = refrigerado;
}

public String Imprimir(){
    return
           "Código do produto: " +getCodigo()+
           "\nNome do produto: " +getNome()+
           "\nValor unitário por produto: " +getValorUnitario()+
           "\nData de validade: " +validade+
           "\nDescricao refrigerado? " +refrigerado;
            

}

}

A classe Produto seria assim:

public abstract class Produto {

    private String nome;
    private String descricao;
    private double preco;

    // getters e setters
}

Aí modifica a declaração do seu ProdutoPerecivel assim:

public class ProdutoPerecivel extends Produto {