salve a tutti dovrei fare una classe che gestisca una lista di oggetti e ho fatto una cosa del genere

codice:
//classe catalogo
public class Catalogo {

    private ArrayList<Item> catalogo = new ArrayList <Item>(); 
    
    public void Catalogo(){
    }
   
    public void addProdotto(Item item){
     
        catalogo.add(item);
    }
    public void removeProdotto(Item item){
        catalogo.remove(item);
    } 
    public void MostraCatalogo(){
        for(int i=0; i<catalogo.size();i++){
           
            System.out.println(catalogo.get(i).GetNomeItem());
            System.out.println(catalogo.get(i).GetCodItem());

        }
    }
}

codice:
//classe item

public class Item {
    private String nomeprodotto;
    private int codice,
                disp,
                prezzo;
    
    public void Item(){
        nomeprodotto="";
        codice=0;
        disp=0;
        prezzo=0;
    }
   
    public void SetNomeItem(String nome){
        this.nomeprodotto=nome;
    }
 
    public void SetCodItem(int codice){
        this.codice=codice;
    }
   
    public void SetDispItem(int disp){
        this.disp=disp;
    }

    public void SetPrezzoItem(int prezzo){
        this.prezzo=prezzo;
    }
   
    public String GetNomeItem(){
        return this.nomeprodotto;
    }
    
    public int GetCodItem(){
        return this.codice;
    }

    public int GetDispItem(){
        return this.disp;
    }
    
    public int GetPrezzoItem(){
        return this.prezzo;
    }
}

codice:
//main
public class Store {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
     //Grafica grafica = new Grafica();
     
     //grafica.setVisible(true);
     Scanner scanner = new Scanner(System.in);
     Item item=new Item();
     
     Catalogo catalogo = new Catalogo();
     int i=0;
     while(i<3){
     System.out.println("Inserisci nome articolo");
     String s= scanner.next();
     item.SetNomeItem(s);
     System.out.println("Inserisci codice articolo");
     int c= scanner.nextInt();
     item.SetCodItem(c);
     catalogo.addProdotto(item);
     catalogo.MostraCatalogo();
     i++;
     }
    }
}
ma quando poi nel main vado a stampare gli oggetti li sovascrive non capisco dove sta l'errore e mi chiedo se ha senso creare quella classe catalogo con i metodi add essendo il metodo add integrato già nella classe ArrayList.