Magari qualche indicazione in più sarebbe utile.

Ho trovato la classe col main() (Receipt.java) e vedo che

1) Non potrà mai compilare: nel main viene dichiarato e istanziato un array di tipo Utente, classe che non esiste... esiste la classe User.

2) Istanzi un array di Utente con 1 solo elemento (perchè?), ma non usi mai l'array: non crei nessun oggetto Utente e non ci fai nulla... leggi le informazioni da tastiera e le butti via.

3) Istanzi un array di 5 oggetti Product che non usi da nessuna parte: non crei nemmeno un oggetto Product. La classe col main si limita a leggere da tastiera un po' di informazioni per poi buttarle via e non farci nulla.

Direi che il problema non è tanto l'applicazione dello sconto, è più a monte: non istanzi nessun oggetto, non ne richiami nessun metodo, leggi delle informazioni che poi butti via.

Se la classe si chiama User, dovresti creare un oggetto User (non Utente):
codice:
User user = new User(name, surname, idcard);

Da qualche parte devi istanziare i prodotti del tipo corretto:
codice:
p[i] = new Food( ... );

oppure

p[i] = new NonFood( ... );

Quando avrai istanziato questi oggetti, potrai invocare su di essi i metodi che hai definito.


Ciao.