Académique Documents
Professionnel Documents
Culture Documents
class Abc {
public static void main(String[] args) {
I Variable dinstance: A.c++;
A v1;
I Rservation dune zone pour chaque objet construit avec new v1 = new A();
I Rsultat : chaque objet a sa propre zone/valeur pour la variable dinstance v1.modifier();
}
I Variable de classe (statique) : }
I Dclaration prcde par static class A {
I Rservation dune zone lors du chargement de la classe int b = 1; // variable d'instance
I Aucune zone rserve quand un objet est construit avec new static int c = 10; // variable de classe
void modifier() {
I Rsultat : tous les objets se rfrent la mme zone/valeur pour la variable de
b++;
classe c++;
}
}
Pourquoi utiliser static? Valeur commune
A quoi sert une variable statique ? I avec une variable dinstance ageRetraite
I avec une variable statique ageRetraite
1. Bonne raison dutiliser une variable statique :
I Reprsentation dune valeur qui est commune tous les objets de la classe
Restrictions sur les mthodes statiques (2) Utilit des mthodes statiques
class A {
int i; + Mthodes qui ne sont pas lies un objet
static int j;
void methode1() { Exemple :
System.out.println(i); // OK
System.out.println(j); // OK I Classe mettant disposition des utilitaires mathmatiques divers
methode2(); // OK
}
I La cration dun objet de type MathUtils est artificielle
static void methode2() { I La classe sert seulement stocker des mthodes utilitaires
System.out.println(i); // Faux
System.out.println(j); // OK
methode1(); // Faux class MathUtils {
methode2(); // OK (sauf recursion infinie) public final static double PI = 3.14159265358979323846;
A v = new A(); public static double auCube(double d) {
v.methode1(); // OK return d*d*d;
} }
} }
Utilit des mthodes statiques (2) Mthodes et variables statiques
Eviter la prolifration de static !
On lutilise seulement dans des situations trs particulires :
Utilisation de la classe MathUtils : I dfinition dune constante : attribut final static
I Calculer y = x 3 pour x = 5.7; (situation trs courante)
I On peut accder aux variables/mthodes statiques sans construire dobjet I utilisation dune valeur commune : attribut static
(plus rare)
class Calcul {
public static void main(String[] args) { I mthodes utilitaires quil est artificiel de lier un objet :
double x = 5.7; mthode static, invocable sans objet
double y = MathUtils.PI * MathUtils.auCube(x); (plus rare aussi)
System.out.println(y);
}
} Exemples de mthodes statiques :
I Math.sqrt
I la mthode main
Balle, Raquette
I . . . et dautres non : Joueur, Filet
class Graphique
Mais . . . Java ne permet que lhritage simple : chaque sous-classe ne peut avoir
quune seule classe parente directe !
Hritage simple/multiple Analyse
Mais en fait, que souhaitait-on utiliser de lhritage multiple dans le cas de notre
exemple de jeu vido ?
I Pourquoi pas dhritage multiple en Java ? + Le fait dimposer certaines classes de mettre en oeuvre des mthodes
I Parfois difficile comprendre (quel sens donner ?), y compris pour le compilateur communes
(par exemple si une sous-sous-classe hrite dune super-super-classe par Par exemple :
diffrents chemins)
I Balle et Raquette doivent avoir une mthode gestionClic;
I Si une variable/mthode est dclare dans plusieurs super-classes I mais gestionClic ne peut tre une mthode de leur super-classe (car na pas
I Ambigut : laquelle utiliser, comment y accder ? de sens pour un Joueur par exemple).
Exemple :
class Balle class Raquette class Filet class Joueur
interface Graphique {
void dessiner();
}
interface Interactif {
interface Graphique
void gestionClic();
void dessiner()
}
Attribution dune interface une classe : Une interface attribue un type supplmentaire une classe dobjets, on peut donc :
Syntaxe :
I Dclarer une variable de type interface
class UneClasse implements Interface1, . . . , InterfaceN
{ ... }
I Y affecter un objet dune classe qui implmente linterface
I (ventuellement, faire un transtypage explicite vers linterface)
Nous avons vu que lhritage permet de mettre en place une relation de type
est-un entre deux classes.
Lorsquune classe a pour attribut un objet dune autre classe, il stablit entre les
deux classes une relation de type a-un moins forte que lhritage (on parle de
dlgation).