Construire une classe

Jusqu'a present, nous avons ecrit des programmes qui ressemblaient fortement a du C standard. La seule difference etait que le programme etait inclus dans une classe car, en JAVA, il est totalement impossible d'ecrire des lignes de code (variables, fonctions ou procedures) qui n'appartiennent pas a une classe.

Une classe se decompose classiquement en un ensemble de variables, de methodes et d'un constructeur de classe. Il n'y a pas ici de destructeur : en effet, le langage dispose d'un garbage collector qui se charge de liberer les objets devenus inutiles.

On indiquera qu'une nouvelle classe herite d'une autre par le mot cle extends :

class classe_fille extends classe_mere

Si on a besoin du constructeur de la classe mere pour initialiser les elements de la fille, on fera appel a la methode super() dans le constructeur de la fille.

Les elements (attributs) d'une classes sont declares avec divers controles d'acces. Ces controles d'acces sont un peu differents de ceux de C++ :

Lorsqu'un element d'une classe est declare static, quel que soit le nombre d'instances de cette classe, il n'existera qu'un et un seul de ces elements (qui sera donc partage). Les autres elements sont declares dynamiquement (lors du new qui cree une instance de cette classe).

Programme :
public class ma_classe 

    /* Ces variables ne sont pas accessibles de l'exterieur */

    private static int valeur ; 

    private static autre_classe autre_obj ;

    /* pas de constructeur pour cette classe appelee directement */

    public void affiche() 

    { System.out.println("Tout le monde peut voir ma valeur : " + valeur) ; }

    protected void incremente(int combien) 

      System.out.println("Les membres du package incremente " + valeur + " de " + combien) ; 

      valeur = valeur + combien ; 

    }

    private static void reinit() 

    { valeur = 0 ; }

    /* methode de depart appelee par <java ma_classe> */

    public static void main(String[] args) 

      valeur = 0 ; 

      autre_obj = new autre_classe() ; 

      autre_obj.travaille() ; 

      reinit() ; 

    }
}

class autre_classe 

    private ma_classe obj1, obj2 ;

    autre_classe() 

      System.out.println("Le constructeur de autre_classe.") ; 

      obj1 = new ma_classe() ; 

      obj2 = new ma_classe() ; 

    }

    autre_classe(int param)

    {

      System.out.println("Java accepte le polymorphisme " + param) ;
    }

    void travaille() 

      /* acces a l'objet depuis l'interieur du package */ 

      obj1.affiche() ; 

      obj2.affiche() ; 

      obj1.incremente(5) ; 

      obj1.affiche() ; 

      obj2.affiche() ; 

      /* obj.reinit() ; ne serait pas accepte a la compilation */ 

    }
}

Resultat de l'execution :
Le constructeur de autre_classe. 

Tout le monde peut voir ma valeur : 0 

Tout le monde peut voir ma valeur : 0 

Les membres du package incremente 0 de 5 

Tout le monde peut voir ma valeur : 5 

Tout le monde peut voir ma valeur : 5


Ph. RIS 1997