Académique Documents
Professionnel Documents
Culture Documents
p Convention: Pour nommer une classe, vous devez respecter les règles suivantes :
à Le nom doit commencer par une majuscule.
Exp: Point, Sphere, ...
2
à Quand une classe est composée de plusieurs mots, tous les mots commencent par
une lettre majuscule.
Exp: ProgrammePrincipal, TestPoint, ...
Voyons maintenant comment définir le contenu de notre classe, en distinguant les champs
des méthodes.
. }
. }
Une fois définie cette classe, le type Point est un type comme les autres, il devient donc
possible d’éecrire
Point p1,p2;
Cette instruction déclare deux variables p1 et p2 de type Point, ces variables s’appellent des
objets. Une classe permet d’instancier plusieurs objets.
2. 3 Surcharge de méthodes
La surcharge ou surdéfinition est la possibilité de créer dans une classe plusieurs méthodes
qui portent le même nom mais avec différents paramètres et/ou valeurs de retour. Le compilateur
Java décide de la méthode à appeler en regardant la valeur de retour et les paramètres.
p Exemple:
class Point{
. public int x,y;
. ...
. void deplacer (int dx) { x += dx; }
. void deplacer (int dx, int dy) { x += dx; y += dy; }
. void deplacer (double dx, double dy) { x += dx; y += dy; }
. ...
}
p Exemple:
public class ProgrammePrincipal {
4
4 La notion de constructeur
Vous vous demandez peut-être comment on fait pour créer une instance à partir d’une
classe ? C’est très simple. Il suffit, pour cela, de faire appel à un constructeur.
Chaque classe a une méthode spéciale appelée constructeur, qui porte toujours le même nom
que la classe et ne peut pas préciser de valeur de retour (c’est l’objet créé qui est renvoyé). Il
peut disposer d’un nombre quelconque d’arguments (éventuellement aucun).
p Remarque:
Par essence, un constructeur ne fournit aucune valeur. Dans son en-tête, aucun type ne
doit figurer devant son nom. Même la présence (logique) de void est une erreur :
class Point{
. .....
. void Point (){ // erreur de compilation : void interdit ici
. .....
. }
}
4. 1 Surcharge de constructeurs
Le langage Java permet aussi la définition de plusieurs constructeurs, à l’intérieur d’une
même classe, du fait que la construction des objets peut se réaliser de différentes façons. Lors-
qu’il existe plusieurs constructeurs, on dit que le constructeur est surchargé.
Pour l’utilisateur de la classe, il peut être pratique de disposer de plusieurs constructeurs afin
qu’il puisse choisir les valeurs d’initialisation du nouvel objet. En effet, les constructeurs sont
utilisés pour initialiser correctement les données d’un objet au moment de la création de l’objet
en mémoire.
Par exemple pour pouvoir créer un point à partir de son abscisse, nous définissons le construc-
teur suivant:
p Exemple:
Point a = new Point (1);
Point b = new Point (2,3);
6
Pour déterminer quel constructeur doit être utilisé, l’interpréteur Java regarde, lors de son
appel, la liste des paramètres définis dans chaque constructeur.
p Exemple:
public class A {
int x; double y;
char c;
public class A { boolean t;
int x; double y; String ch;
char c; ⇔ public A() { x=0; y=0.0;
boolean t; c=’\0’;
String ch; t=false;
} ch=null;
}
}
Dès qu’il y a création d’un constructeur, celui-ci écrase d’office le constructeur par défaut.
Vous ne pouvez donc plus créer un code en faisant un appel explicite à ce constructeur là car il
n’existe plus, comme le montre cet exemple :
5 Accès aux membres d’une classe 7
p Exemple:
class Point {
. public int x, y ;
. public Point ( int x0 , int y0) {
. x = x0 ;
. y = y0 ;
. }
}
public class TestPoint ( ) {
. public static void main ( String args[]) {
. Point a = new Point() ; // erreur
. Point b = new Point(3,5) ; // ok
. }
}
nomObjet.méthode(args)
. nomObjet.variable
p Exemple:
class Point{
. public int x,y;
. Point(int x0,int y0) {x=x0; y=y0;}
. void deplacer(int dx, int dy) {x += dx; y += dy ;}
. }
public class TestPoint {
. public static void main(String args[]) {
. Point a = new Point(3,4);//crée un objet a.
. a.x=2;//affecte 2 à la variable x de l’objet a.
. a.y=6;// affecte 6 à la variable y de l’objet a.
. a.deplacer(2,2); // affecte 2 aux variables dx et dy.
8
. }
}
6 Affectation d’objets
Nous avons étudié le rôle de l’opérateur d’affectation sur des variables d’un type primitif.
Par ailleurs, nous venons de voir qu’il existe des variables de type classe, destinées à contenir
des références sur des objets. Comme on peut s’y attendre, ces variables pourront être soumises
à des affectations. Mais celles-ci portent sur les références et non sur les objets eux-mêmes, ce
qui modifie quelque peu la sémantique (signification) de l’affectation. C’est ce que nous allons
examiner à partir de un exemple.
Supposons que nous disposions d’une classe Point possédant un constructeur à deux arguments
entiers et considérons ces instructions :
. Point a, b ;
. .....
. a = new Point (3, 5) ;
. b = new Point (2, 0) ;
Après leur exécution, on aboutit à cette situation :
Dorénavant, a et b désignent le même objet, et non pas deux objets de même valeur.
p Exemple:
Combien d’instances de la classe Point crée le code suivant?
Point p1,p2,p3;
p1=new Point(1,2);
Point p4=p1;
Point p5=new Point(3,4);
å Il y a deux instances de Point crées par les deux new, la première est référencée par p1
et p4, la deuxième par p5.
p Exemple:
class Point {
. int x, y;
. Point(int x, int y){
. this.x=x;
. this.y=y;
. }
. Point(int x) {
. this(1,2);
. ...
. }
. Point() {
. this(4);
. ...
. }
}
10
p Exemple:
å R: Non, dans les constructeurs l’appel au constructeur doit être effectué en premier.
Après la correction le programme affiche Année: 2020.
8 Membres statiques
La déclaration d’un membre statique est précédée du modifieur static. Un membre sta-
tique est lié à la classe et non à un objet de la classe. Autrement dit, le membre est partagé
par tout les objets de la classe (v membre globale).
Pour accéder à un membre statique, il faut le précéder du nom de sa classe.
NomDeLaClasse.nomDeLaVariable
. NomDeLaClasse.nomDeLaMethode(liste de paramètres)
p Exemple:
Math.PI, Math.cos(x), Math.sin(x) , ...
⇒ La classe Math contient un membre de classe dont le nom est PI, cos(), sin(x), ...
Une méthode statique ne peut utiliser que des membres statiques à la classe, afin de garantir
l’utilisation exclusive de données statiques.
8 Membres statiques 11
p Exemple:
class Addition { public class TstMembreStatique {
static int c ; public static void main(String args[]) {
int a,b ; Addition obj1=new Addition(10,10);
Addition(int x, int y) {a=x ; b=y; } Addition.fctConst(1);
static void fctConst(int cte){ System.out.println(obj1.somme());
c=cte; Addition.c= 2;
a=cte;//Erreur car a n’est pas statique System.out.println(obj1.somme());
} }
int somme(){ return a+b+c;} }
}
p Remarque:
Une classe peut ne contenir que des membres static. Dans ce cas elle ne sert pas à créer
des objets !!!