Correction exercice 1

/**
 * Un PerishableProduct etend la notion de Product en ajoutant une
 * date limite de consommation.  Elle ajoute egalement les methodes
 * pour gerer cette date.
 * @authors  F.Dagnat P.Geffroy
 */
public class PerishableProduct extends Product {
    /** Chaque PerishableProduct a un date de peremption */
    private Date bestBeforeDate;
    
    /** Un constructeur creant le produit et lui affectant une date de
     * peremption
     * @param  name le nom du nouveau Product 
     * @param  bestBeforeDate la date de peremption */
    public PerishableProduct(String name, Date bestBeforeDate) { 
        super(name);
        this.bestBeforeDate = bestBeforeDate; 
    }
    
    /** indique si le produit est encore consommable */
    public boolean isOutOfDate(){
        Date now = new Date();
        return  bestBeforeDate.before(now); // ou now.after(bestBeforeDate);
    }  
    
    /** retourne la date de peremption. */
    public Date getBestBeforeDate(){ return  bestBeforeDate; }  
        
    /** methode standard qui transforme un objet en chaine de caracteres. */
    @Override  // pour declarer/prevenir que c'est une *redefinition*
    public String toString() {
        return super.toString() + " sera perime le " + bestBeforeDate; }
   
    public static void main(String args []) {
        PerishableProduct p1, p2, p3;
        Date d1, d2, d3;
        d1 = new Date(2021, 12, 10);
        d2 = new Date(2021, 12, 19);
        d3 = new Date(2021, 12, 25);
        p1 = new PerishableProduct("beurre", d1);
        System.out.println("NombreproduitCrees ==  " + Product.getNumberCreated());
        System.out.println(p1);
        p2 = new PerishableProduct("lait", d2);
        p3 = new PerishableProduct("buche au chocolat", d2);
        if(p1.isOutOfDate())
            System.out.println("Aujourd'hui " + new Date() + " " + p1 + " est perime");
        else
            System.out.println("Aujourd'hui " + new Date() + " " + p1 + " n'est pas perime");
        System.out.println(p1);
        System.out.println(p3);
        System.out.println("numero de p3  :" + p3.getNumber());
        System.out.println("Nombre de produits crees =  " + Product.getNumberCreated());
        System.out.println("Le produit  " + p3.getName() + " sera perime le " +
                           p3.getBestBeforeDate());
    }
}