1. La construction est une interface, c'est à dire qu'elle définit un certain nombre de méthodes (y compris leurs types ou signatures) que toute classe prétendant implémenter devra au moins posséder, avec des types compatibles (égaux ?). Le compilateur vérifiera. Par ailleurs les commentaires donnent une propriété-clé des sacs Attention, rien dans le compilateur ne garantira cette propriété ou contrat, le programmeur devra faire attention.

    Les sacs sont des sacs d'entiers (type int), comme montré par les signatures des méthodes add et get. Nos sacs ne sont pas des ensembles, car il peuvent contenir des doublons.

  2. Le code va imprimer les entiers de 0 à 15 dans un ordre non-spécifié. La propriété des sacs garantit la terminaison de la boucle while. Pour une pile (Last in, first out), les entiers sont imprimés selon l'ordre décroissant. Pour les files (First in, first out) c'est l'ordre croissant.

  3. Et voilà :
    class Lifo implements Bag {
      
    private List me ;

      
    Lifo () { me = null ; }

      
    public boolean isEmpty() { return me == null ; }

      
    public int get () {
        
    if (me == nullthrow new Error ("Pile vide") ;

        
    int r = me.val ;
        me = me.next ;
        
    return r ;
      }

      
    public void add (int x) { me = new List (x,me) ; }
    }
    Bizarrement, les méthodes déclarées dans l'interface sont implicitement publiques.