Buenas, aquí dejo otro ejercicio, el CU00687B del tutorial básico de programación en Java.
public class TestHerencia {
    
    public static void main (String [] args) {
        
        Pfrescos producto1 = new Pfrescos (10.12 , 12, 9.11, "españa");
        
        Pfrescos producto2 = new Pfrescos (5.12, 45, 29.11, "españa");
        
        producto1.mostrarPf();
        
        producto2.mostrarPf();
        Prefrigerados producto3 = new Prefrigerados (10.12 , 12, 9.10, "españa", 5, "c25");
        
        Prefrigerados producto4 = new Prefrigerados (9.12 , 12, 8.10, "españa", 5, "c25");
        
        Prefrigerados producto5 = new Prefrigerados (11.12 , 12, 10.10, "españa", 5, "c25");
        producto3.mostrarPr();
        
        producto4.mostrarPr();
        
        producto5.mostrarPr();
        
        PCAgua producto6 = new PCAgua (9.12 , 12, 5.5, "españa", 0, "1% nitrogeno, 2% oxígeno, 3% CO2, 4% H2O");
        
        PCAgua producto7 = new PCAgua (8.12 , 11, 4.5, "españa", 0, "1% nitrogeno, 2% oxígeno, 3% CO2, 4% H2O");
        
        producto6.mostrarPCAgua();
        
        producto7.mostrarPCAgua();
        
        PCAire producto8 = new PCAire (9.12 , 12, 5.5, "españa", 0, "30 g/l");
        
        PCAire producto9 = new PCAire (8.12 , 12, 4.5, "españa", 0, "30 g/l");
        
        producto8.mostrarPCAire();
        
        producto9.mostrarPCAire();
        
        PCNitrogeno producto10 = new PCNitrogeno (9.12 , 12, 5.5, "españa", 0, "lenta", 100);
        
        producto10.mostrarPCNitrogeno();
    }
}
public class Productos {
    
    private double fCaducidad;
    
    private int nºLote;
    
    public Productos (double fCaducidad, int nºLote) {
        
        this.fCaducidad = fCaducidad;
        
        
        this.nºLote = nºLote;
        
    }
    
    public void fCaducidad (double fCaducidad) {
        
        this.fCaducidad = fCaducidad;
    
    }
    
    public void nºLote (int nºLote) {
        
        this.nºLote = nºLote;
    
    }
    
    public double getCaducidad () {return fCaducidad;}
    
    public int getNºLote () { return nºLote;}
    
}
public class Pfrescos extends Productos {
    
    private double fenvasado;
    
    private String porigen;
    
    public Pfrescos (double fCaducidad, int nºLote, double fenvasado, String porigen) {
        
        super (fCaducidad, nºLote);
        
        this.fenvasado = fenvasado;
        
        this.porigen = porigen;
    }
    
    public void setfenvasado (double fenvasado) {
        
        this.fenvasado = fenvasado;
    
    }
    
    public void setporigen (String porigen) {
        
        this.porigen = porigen;
    
    }
    
    public double getfenvasado() {return fenvasado;}
    
    public String getporigen() {return porigen;}
    
    public void mostrarPf() {
        
        System.out.println ("el producto fresco fué envasado en fecha de " + getCaducidad() + "\n"+ " el número de lote es " + getNºLote() + "\n" + " la fecha de envasado es " + getfenvasado() + "\n" + "el país de origen del producto es " + getporigen());
    
    }
}
public class Prefrigerados extends Pcongelados {
    
    String cOrganismo;
    
    public Prefrigerados (double fCaducidad, int nºLote, double fenvasado, String porigen, double tªMantenimientoRecomendada, String cOrganismo) {
        
        super (fCaducidad, nºLote, fenvasado, porigen, tªMantenimientoRecomendada);
        
        this.cOrganismo = cOrganismo;
    }
    
    public void setCOrganismo ( String cOrganismo) {
        
        this.cOrganismo = cOrganismo;
    
    }
    public String getCOrganismo () {return cOrganismo;}
    
    public void mostrarPr() {
        
         System.out.println ("el producto congelado fué envasado en fecha de " + getCaducidad() + "\n"+ " el número de lote es " + getNºLote() + "\n" + " la temperatura de mantenimiento recomendada " + getTªMantenimientoRecomendada() +"\n"+ " la fecha de envasado es " + getfenvasado() +"\n"+ " el país de origen es " + getporigen()+"\n"+ "el código del organismo alimentario es " + getCOrganismo ()) ;
    
    }
}
public class Pcongelados extends Pfrescos  {
    
    private double tªMantenimientoRecomendada;
    
    public Pcongelados (double fCaducidad, int nºLote, double fenvasado, String porigen, double tªMantenimientoRecomendada) {
        
        super (fCaducidad, nºLote, fenvasado, porigen);
        
        this.tªMantenimientoRecomendada = tªMantenimientoRecomendada;
    
    }
    
    public void setTªMantenimientoRecomendada (double tªMantenimientoRecomendada) {
        
        this.tªMantenimientoRecomendada = tªMantenimientoRecomendada;
    
    }
    
    public double getTªMantenimientoRecomendada() {return tªMantenimientoRecomendada;}
    
    public void mostrarpCongelados() {
        
        System.out.println ("el producto congelado fué envasado en fecha de " + getCaducidad() + "\n"+ " el número de lote es " + getNºLote() + "\n" + " la temperatura de mantenimiento recomendada " + getTªMantenimientoRecomendada() +"\n"+ " la fecha de envasado es " + getfenvasado() +"\n"+ " el país de origen es " + getporigen()) ;
    
    }
}
public class PCNitrogeno extends Pcongelados {
    
    private String mCongelacion;
    
    private int tExposicion;
    
    public PCNitrogeno (double fCaducidad, int nºLote, double fenvasado, String porigen, double tªMantenimientoRecomendada, String mCongelacion, int tExposicion) {
 
        super (fCaducidad, nºLote, fenvasado, porigen, tªMantenimientoRecomendada);
        
        this.mCongelacion = mCongelacion;
        
        this.tExposicion = tExposicion;
    }
    
    public void setMCongelacion (String mCongelacion) {
        
         this.mCongelacion = mCongelacion;
    
    }
    
    public void setTExposicion (int tExposicion) {
        
        this.tExposicion = tExposicion;
    
    }
    
    public String getMCongelacion() {return mCongelacion;}
    
    public int getTExposicion() {return tExposicion;}
    
        public void mostrarPCNitrogeno() {
    
            System.out.println ("el producto congelado fué envasado en fecha de " + getCaducidad() + "\n"+ " el número de lote es " + getNºLote() + "\n" + " la temperatura de mantenimiento recomendada " + getTªMantenimientoRecomendada() +"\n"+ " la fecha de envasado es " + getfenvasado() +"\n"+ " el país de origen es " + getporigen() +"\n"+ "el método de congelación utilizado fué " + getMCongelacion() +"\n"+ "el tiempo de exposición al nitrógeno fue " + getTExposicion());
        }
}
public class PCAgua extends Pcongelados {
    
    private String salinidad;
    
    public PCAgua (double fCaducidad, int nºLote, double fenvasado, String porigen, double tªMantenimientoRecomendada, String salinidad) {
 
        super (fCaducidad, nºLote, fenvasado, porigen, tªMantenimientoRecomendada);
        
        this.salinidad = salinidad;
    }
    
    public void setSalinidad (String salinidad) {
        
        this.salinidad = salinidad;
    
    }
    
    public String getSalinidad() {return salinidad;}
    
        public void mostrarPCAgua() {
    
            System.out.println ("el producto congelado fué envasado en fecha de " + getCaducidad() + "\n"+ " el número de lote es " + getNºLote() + "\n" + " la temperatura de mantenimiento recomendada " + getTªMantenimientoRecomendada() +"\n"+ " la fecha de envasado es " + getfenvasado() +"\n"+ " el país de origen es " + getporigen() +"\n"+ "la salinidad del agua de congelación es " + getSalinidad());
        }
}
public class PCAire extends Pcongelados {
    
    private String composicion;
    
    public PCAire (double fCaducidad, int nºLote, double fenvasado, String porigen, double tªMantenimientoRecomendada, String composicion) {
 
        super (fCaducidad, nºLote, fenvasado, porigen, tªMantenimientoRecomendada);
        
        this.composicion = composicion;
    }
    
    public void setComposicion (String composicion) {
        
        this.composicion = composicion;
    
    }
    
    public String getComposicion() {return composicion;}
    
        public void mostrarPCAire() {
    
            System.out.println ("el producto congelado fué envasado en fecha de " + getCaducidad() + "\n"+ " el número de lote es " + getNºLote() + "\n" + " la temperatura de mantenimiento recomendada " + getTªMantenimientoRecomendada() +"\n"+ " la fecha de envasado es " + getfenvasado() +"\n"+ " el país de origen es " + getporigen() +"\n"+ "la composición del aire de congelación es " + getComposicion());
        }
}
Decir que soy consciente de que me podía haber ahorrado la clase productos, pero ya que estaba la dejé.
Un saludo.