Académique Documents
Professionnel Documents
Culture Documents
Java
1
Prsentation
Notion Notion Notion Notion dobjet de classe dencapsulation dhritage
Premier programme Java Les types primitifs de Java Les oprateurs Les instructions de contrle
VI.
1. 2. 3. 4. 5. 6. 7.
VII.
1. 2. 3. 4. 5. 6. 7.
Les tableaux
Dclaration Dclaration avec initialisation Utilisation d'un tableau La taille d'un tableau Exercices Passage des paramtres Les tableaux d'objets
VIII. IX.
I. Prsentation
Quest-ce que java ? Java est un langage de programmation Java est aussi une plateforme
La plateforme java, uniquement software, est excute sur la plateforme du systme dexploitation Elle est constitue de :
La Java Virtual Machine (JVM) Des interfaces de programmation dapplication (API)
Atouts de Java
Langage de programmation simple ; Orient objet ; Comporte un grand nombre dobjets prdfinis pour lutilisateur ; Neutre architecturalement ( = portabilit ) ; Distribu gratuitement !!!
5
Neutralit architecturale
Un programme Java est compil puis interprt.
MonProgramme.java
Compilateur JAVA
MonProgramme.class
Mac(JVM)
Windows(JVM)
Unix(JVM)
Historique du langage
1991 : dveloppement de OAK
Langage simple, portable et orient objets Pour la programmation de petits appareils lectromnagers Emprunte la portabilit du Pascal (VM) et la syntaxe du C++
7
Historique du langage
1995 : intgration de la JVM dans Netscape
OAK tant un nom dpos, le projet sappellera JAVA Apparition des Applets qui ont fait le succs de Java (remplacs aujourdhui par Flash)
Historique du langage
Dcembre 98 : SUN annonce une nouvelle dnomination pour ses produits Java :
Plate-forme Java 2
Version actuelle : J2SE 6
Historique du langage
Pourquoi Java ?
10
11
1. Notion dobjet
Objet = unit autonome qui a ses propres donnes et un ensemble de procdures qui agissent sur ces donnes ;
12
1. Notion dobjet
a) les donnes
Une voiture a des donnes concernant sa couleur, sa marque, En terme de programmation, les donnes sont stockes dans des variables. Si nous reprsentons plusieurs voitures, chacune aura ses propres variables. (*)
13
1. Notion dobjet
b) les comportements
Pour accder aux donnes, il faut prvoir un ensemble de comportements, ils constitueront une interface entre lobjet et les programmes. Exemples de comportement : acclrer, freiner, tourner(gauche), tourner(droite),
14
1. Notion dobjet
En jargon orient objet, on dira que : - les donnes sont les attributs dun objet ; - les comportements sont les mthodes de lobjet ;
15
2. Notion de classe
Les objets sont dfinis par des classes ; Une classe est le moule dun objet ; On peut crer plusieurs objets partir dune seule classe. (*)
16
2. Notion de classe
En jargon orient objet, on dira : un objet est une instance dune classe
17
3. Notion dencapsulation
Soit un lecteur Mp3, il nest pas ncessaire de connatre son fonctionnement interne pour pouvoir lutiliser. Lutilisateur se sert uniquement de son interface (boutons, cran, couteur,) Les objets en POO doivent fonctionner de la mme manire.
18
3. Notion dencapsulation
Lorsquun objet est parfaitement crit, lutilisateur ne peut accder directement aux donnes ; Il doit passer par les mthodes qui servent dinterface entre lobjet et ses utilisateurs ;
19
3. Notion dencapsulation
20
4. Notion dhritage
L'hritage est une technique qui permet de crer une nouvelle classe partir d'une classe existante. La sous-classe hrite des caractristiques de la classe de base. Intrt : pouvoir dfinir de nouveaux attributs et mthodes pour la sous-classe, qui viennent s'ajouter ceux et celles hrits. (*)
21
22
23
24
Remarque : Pour obtenir ces valeurs on peut faire appel aux constantes prdfinies Byte.MIN_VALUE, Byte.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE, etc
25
26
Le type caractre
char
2 octets
27
Le type boolen
boolean
Exemple d'initialisation :
28
Initialisation de variable
int n = 5 ; int n ; n = 5 ; int duo = 2 * n ;
En Java, une variable doit tre initialise avant d'tre utilise (sinon erreur de compilation).
29
Les constantes
final int N = 20 ; final int N = 2 * p ; final int N ; N = Clavier.lireInt () ; // Premire affectation : OK N=N+1; // 2me affectation : erreur de compilation
30
31
Oprateurs arithmtiques
+ * / % addition soustraction multiplication division modulo, reste de la division sur entiers ou flottants
32
33
Il y a conversion implicite dans l'valuation des expressions arithmtiques ; Elle tient compte de la priorit des oprateurs ; Peut se faire condition de ne pas dnaturer la valeur initiale :
int long float double
Oprateurs relationnels
< <= > >= == != infrieur infrieur ou gal suprieur suprieur ou gal gal diffrent
36
Oprateurs logiques
! & ^ | && || ngation et ou exclusif ou inclusif et avec court-circuit ou inclusif avec court-circuit
37
Oprateurs dincrmentation
++ pr ou post-incrmentation
--
pr ou post-dcrmentation
Oprateur gauche de son oprande : on incrmente ou dcrmente d'abord ; Oprateur droite de son oprande : on incrmente ou dcrmente aprs ;
39
Exemples
a = ++ i ; a = i ++ ;
// // i=i+1; a=i; a=i; i=i+1;
tab[i++] = Clavier.lireInt() ;
// garnit tab[i] puis incrmente i
i ++ ; ++ i ;
41
Loprateur de CAST
Si a et b sont de type float, et n de type entier : n=a/b; donne une erreur de compilation "possible loss of precision - found float - required int"
42
Pour forcer la conversion de l'expression en entier, on utilise un oprateur nomm cast. n = (int) (a / b) ; Que pensez-vous de ceci ? n = (int) a / b ; Nouvelle erreur de compilation
Remarque : le cast (la conversion) est possible galement vers les autres types de donnes numriques
Exercice
int a = 1 , b = 2 ; float f = 5.5f ; double d = 8.4 ; f=a+b; a = b * 2.5 ; a = (int) d + f ; d=a*f; f = a + (int) d ;
45
Exercice
int a = 1 , b = 2 ; float f = 5.5f ; double d = 8.4 ; f=a+b; a = b * 2.5 ; a = (int) d + f ; d=a*f; f = a + (int) d ;
// oui
46
Exercice
int a = 1 , b = 2 ; float f = 5.5f ; double d = 8.4 ; f=a+b; a = b * 2.5 ; a = (int) d + f ; d=a*f; f = a + (int) d ;
47
Exercice
int a = 1 , b = 2 ; float f = 5.5f ; double d = 8.4 ; f=a+b; a = b * 2.5 ; a = (int) d + f ; d=a*f; f = a + (int) d ;
48
Exercice
int a = 1 , b = 2 ; float f = 5.5f ; double d = 8.4 ; f=a+b; a = b * 2.5 ; a = (int) d + f ; d=a*f; f = a + (int) d ; // // // //
Exercice
int a = 1 , b = 2 ; float f = 5.5f ; double d = 8.4 ; f=a+b; a = b * 2.5 ; a = (int) d + f ; d=a*f; f = a + (int) d ; // // // // //
51
52
Les alternatives
Instruction "if"
if (condition) { instr1 ; instr2 ; } else { instr3 ; instr4 ; }
53
Les alternatives
Instruction "switch"
switch (expression) { case const-1 : instr1 ; instr2 ; ; break; case const-2 : instr3 ; instr4 ; ; break; default : instr5 ; instr6 ; ; }
54
Les alternatives
Exemple
switch (mois) { case 1 : case 2 : case 3: case 4 : case 5 : case 6 : System.out.println ("Premier semestre") ; break ; case 7 : case 8 : System.out.println ("Vacances") ; break ; default : System.out.println ("Fin de l'anne") ; }
55
Les rptitives
Instruction "do while"
do { srie d'instructions ; } while (condition) ; On excute 1 fois la srie d'instructions avant de vrifier la condition !!!
56
Les rptitives
Instruction "while"
while (condition) { srie d'instructions ; } On vrifie la condition avant d'entrer dans la rptitive !!!
57
Les rptitives
Instruction "for"
for ( initialisations ; condition ; incrmentations ) { srie-d'instructions ; }
58
Les rptitives
Exemple 1 int i ; for ( i = 1 ; i < 4 ; i++ ) System.out.println ( "Passage " + i) ; System.out.print ( "I vaut " + i ) ;
Les rptitives
Exemple 2 int i ; for ( i = 6 ; i > 0 ; i -= 2 ) { System.out.print ( "Valeur " ) ; System.out.println ( i ) ; }
Exercices
Afficher les annes jusqu'en 2500. bissextiles d'aujourd'hui
Remarque : une anne est bissextile si elle est multiple de 4 mais pas multiple de 100. Rsoudre cet exercice 1) avec for ; 2) avec while ; 3) avec do while ;
61
Les rptitives
Instruction "break"
-
Break peut tre utilise dans une rptitive pour sortir prmaturment ; Exemple : Calculer la somme de maximum 10 nombres entrs au clavier ou s'arrter avant si on entre 0
62
Les rptitives
int i, n, som ; for ( i=1, som=0 ; i <= 10 ; i++ ) { n = Clavier.lireInt() ; if ( n == 0) break ; // Ce break nous branche som += n ; } // ici System.out.print( "Somme des " + (i-1) + " nb = " + som) ;
63
Les rptitives
Instruction "break" avec tiquette
-
Dans le cas de rptitives imbriques, break fait sortir de la boucle la + interne ; Pour sortir de + d'un niveau, on utilisera le break avec tiquette :
64
Les rptitives
Instruction "break" avec tiquette
boucle : while () { for () { break boucle ; // Ce break nous branche } } // ici cette fois
65
Les rptitives
Instruction "continue"
66
Les rptitives
Exemple
int i ; for ( i = 1 ; i <= 5 ; i++ ) { System.out.println (i) ; if ( i < 4 ) continue ; System.out.println ("Fin " + i) ; } System.out.println ("Fin de boucle") ;
Les rptitives
Solution
1 2 3 4 Fin 4 5 Fin 5 Fin de boucle
68
Les rptitives
Instruction "continue" avec tiquette
-
Dans le cas de rptitives imbriques, continue concerne la boucle la + interne ; Pour descendre de + d'un niveau il y a le continue avec tiquette :
69
Les rptitives
Instruction "continue" avec tiquette
boucle : while (...) { for () { continue boucle ; // Ce continue fait poursuivre } } // la boucle ici
70
71
Dmonstration
Nouvelle variable Classpath avec le chemin du dossier qui contient la classe Clavier et le point qui dsigne le rpertoire courant
72
73
Syntaxe
static void nom-mthode ( liste d'arguments ) { instructions ; }
Appel
Quelques exemples :
Mthode qui affiche "Tu as (n) ans" en ayant reu en argument une anne de naissance.
public class Exemple2 { static void afficheAge(int anaiss) { int age = 2007 - anaiss ; System.out.println("Tu as " + age + " ans") ; } public static void main (String args[]) { afficheAge(1983) ; } }
78
Exemple :
public static void main (String args[]) { int resultat = somme (22, 8) ; ... } } // rsultat rceptionn dans une variable...
2. Notion de classe
public class NomDeClasse { // Attributs et mthodes de la classe }
81
Exemple : soit une classe Point, destine manipuler les points d'un plan.
- initialise : attribue les valeurs de dpart aux coordonnes du point ; - deplace : modifie les coordonnes du point; - affiche : affiche les coordonnes du point;
Point - x : integer - y : integer + void initialise (integer, integer) + void deplace (integer, integer) + void affiche ()
Mthodes
class Point { private int x ; // abscisse private int y ; // ordonne public void initialise (int abs, int ord) { x = abs ; y = ord ; } public void deplace (int dx, int dy) { x += dx ; y += dy ; } public void affiche () { System.out.println ("Mes coordonnees:" + x + " " + y) ; } } (*)
Cette classe Point sert instancier (= crer) des objets de type Point et leur appliquer volont les mthodes disponibles ; Pour faire appel une mthode de la classe : objet.mthode()
Nous pouvons utiliser la classe Point depuis la mthode main d'une autre classe ;
public class TstPoint { public static void main (String args[]) { Point a ; a = new Point() ; a.initialise(3, 5) ; a.affiche() ; a.deplace(2, 1) ; a.affiche() ; Point b = new Point() ; b.initialise(6, 8) ; b.affiche() ; } }
3. Notion de constructeur
Dans la classe Point, il faut toujours commencer par la mthode 'initialise' ; Peu pratique ;
89
Un constructeur automatise ce mcanisme d'initialisation ; Il est automatiquement appel lorsqu'on instancie un objet de la classe ; En Java, il porte le mme nom que la classe ;
Constructeur qui remplace la mthode 'initialise' public Point (int abs, int ord) { x = abs ; y = ord ; }
Autre changement
Il n'est plus ncessaire maintenant de faire appel la mthode initialise On obtient donc :
public class TstPoint { public static void main (String args[]) { Point a = new Point(3, 5) ; // Cette commande fait appel au constructeur... a.affiche( ) ; a.deplace(2, 1) ; a.affiche( ) ; Point b = new Point(6, 8) ; b.affiche( ) ; } }
Un constructeur ne renvoie aucune valeur, aucun type ne doit figurer devant son nom, pas mme void ; Lorsqu'une classe ne comporte pas de constructeur, Java considre un constructeur vide sans arguments ;
95
Un constructeur doit tre dclar 'public' ; Contrairement aux variables dclares dans un 'main', les champs d'un objet sont initialiss par dfaut : une boolenne false une donne numrique 0 un char vide
96
4. Accesseurs et modificateurs
Java permet plusieurs types d'accs pour les attributs, mthodes et constructeurs d'une classe :
private : accessible uniquement ds la classe courante ; public : accessible dans toutes les classes ; (nant) : accessible par les classes du mme package ;
98
Exemple
Soit une classe 'Anne' qui contient un attribut entier 'an' ; Prvoir un constructeur qui initialise 'an' ; Prvoir un modificateur pour permettre par la suite la modification de l'attribut avec un contrle de validit (valeur comprise entre 1950 et 2007) ; Prvoir un accesseur pour permettre la lecture de son contenu ;
public class Annee { private int an; public Annee (int newAn) { an = newAn; } public void setAn (int newAn) { if (newAn >= 1950 && newAn <= 2007) an = newAn; } public int getAn () { return an; } }
public class TestAn { public static void main (String args[]) { An a ; a = new An(1987) ; System.out.println (An : + a.an); // erreur car an est private System.out.println (An : + a.getAn()); // OK car getAn() est public } }
103
Exemple : Soit la classe Point qui possde un constructeur 2 arguments. Point a, b ; a = new Point (3, 5) ; b = new Point (2, 0) ; Aprs excution, on obtient en mmoire (*)
Si on veut tester si ces points sont gaux: if (a == b) // NON car on teste les adressesmmoires des objets ! If (a.getX()==b.getX() && a.getY()==b.getY()) // en supposant quon ait cr des mthodes accesseurs
a et b dsignent donc le mme objet et il n'y a plus aucune rfrence vers le premier objet !!!
Il n'existe pas d'instruction qui permet de librer l'espace inutilisable car Java dispose d'un mcanisme de gestion automatique de la mmoire :
le GARBAGE COLLECTOR
Il intervient :
quand le systme a besoin de mmoire; ou, de temps en temps avec une priorit faible ;
6. Surdfinition ou surcharge
On parle de surcharge lorsque plusieurs constructeurs ou mthodes portent le mme nom ; Dans ce cas, c'est la signature de la mthode qui permet au compilateur de faire la diffrence (= nombre et type d'arguments) ;
109
// 2me constructeur
Lors de l'instanciation : Point a = new Point ( ) ; // Fait appel au 2me constructeur Point b = new Point (4, 6) ; // Fait appel au 1er constructeur
// deplace (int)
Lors de l'excution : Point a = new Point ( ) ; a.deplace(5) ; // Appelle deplace(int) a.deplace(2, 2) ; // Appelle deplace(int, int)
http://java.sun.com/
114
Les attributs existent dans chacune des instances de la classe. On les appelle des variables d'instance. Soit la classe : class A { int n; float y ; }
Avec :
A a1 = new A( ) ; A a2 = new A( ) ;
115
objet a2
116
Java permet de dfinir des variables de classe, elles n'existeront qu'en un seul exemplaire, quel que soit le nombre d'objets instances de la classe ; Il suffit de les dclarer avec l'attribut 'static' ; Exemple : classe avec un champs statique destin contenir le nombre d'objets dj crs ;
117
class Obj { public Obj() { nb++ ; System.out.println ("Il y a " + nb + " objet(s)") ; } private static int nb = 0 ; } public class TstObj { public static void main (String args[ ]) { Obj a ; a = new Obj( ) ; Obj b = new Obj( ) ; Obj c = new Obj( ) ; } Qu'affichera ce programme ? }
118
b) De manire analogue, certaines mthodes peuvent avoir un rle indpendant d'un quelconque objet ; Une telle mthode est dite mthode de classe ; Elle ne pourra agir que sur des variables de classe, puisque par nature elle n'est lie aucun objet en particulier ;
119
// Constructeur
// Mthode de classe : statique public static int nbObj () { return nb ; } private static int nb = 0 ; }
120
public class TstObj2 { public static void main (String args[]) { Obj a = new Obj() ; Obj b = new Obj() ; Obj c = new Obj() ; System.out.print ("Nbre d'objets = " + Obj.nbObj( ) ) ; /* Ici pour faire appel la mthode nbObj, on ne mentionne pas un nom d'objet particulier car la mthode est statique... on l'appelle avec Obj.nbObj() !!! */ } }
121
Pour faire appel une variable de classe ou une mthode de classe, il n'est pas ncessaire d'instancier un objet de la classe concerne, il suffit de mentionner : NomDeClasse.VariableDeClasse ou NomDeClasse.MthodeDeClasse( ) ;
122
Mthodes
123
Vous avez dj, au cours des labos prcdents, manipul des variables et des mthodes statiques sans vous en rendre compte Avez-vous une ide desquelles ? (*)
124
Exercices
1) Parmi les attributs suivants de la classe Renault Espace, la version avec toutes les options possibles, distinguez ceux que vous dclareriez comme statiques des autres : vitesse nombre de passagers vitesse maximale nombre de vitesses capacit du rservoir ge prix couleur
125
2)
Une erreur s'est glisse dans le code suivant, laquelle ? class Test { int a ; Test (int b) {a=b;} } public class PrincipalTest { public static void main (String args[]) { Test unTest = new Test ( ) ; } }
126
3)
Une erreur s'est glisse dans le code suivant, laquelle ? class Test { int a ; int c ; public Test (int b) {a=b;} public static int getC() { return c ; } } public class PrincipalTest { public static void main (String args[]) { Test unTest = new Test (5) ; } }
127
128
1. Dclaration
type nom-du-tableau [ ] ; type [ ] nom-du-tableau ; // Pas de dimension !!!
Les lments d'un tableau peuvent tre de type primitif ou de type objet ; Exemples : int tab[ ] ; Point tabPoints[ ] ;
129
On peut excuter les 2 instructions en 1 fois : int tab[ ] = new int [5] ;
La notation {} ne peut tre utilise que lors de la dclaration, par la suite il faut initialiser les lments un par un
131
System.out.print (tab[4]) ;
Remarque : on crit tableau.length sans parenthses car length est un champs public de l'objet tableau et non une mthode
133
5. Exercices
Que donne l'excution du code suivant ?
public class Affectation { public static void main (String args[]) { int i ; int t1[] = {1, 2, 3} ; int t2[] = new int[5] ; for (i=0 ; i<5 ; i++ ) t2[i] = 2*i ; t2 = t1 ; for (i=0 ; i<t2.length ; i++) System.out.println (t2[i]) ; } }
134
Laffichage donnera :
(on a modifi le contenu de la variable locale k qui est dtruite en sortant de la procdure)
137
b)
Lorsqu'on transmet un tableau en argument, on envoie la rfrence du tableau (= son adresse), la mthode agit alors directement sur le tableau concern et non sur une copie (=passage par rfrence) public class TransmReference { public static void main(String[] args) { int t[] = {4,8} ; modifTab(t); // On envoie l'adresse du tableau... System.out.println(t[0]) ; } static void modifTab (int tab[]) { tab[0] = 3 ; System.out.println(tab[0]) ; } }
138
public class TabPoint { public static void main (String args[]) { Point t1[]; // dclaration du tableau t1 = new Point[3]; // cration du tableau t1[0] = new Point(2,7); // cration des 3 points t1[1] = new Point(4,21); t1[2] = new Point(11,3); for (i=0 ; i<t1.length ; i++) t1[i].affiche() ;// affichage des 3 points } }
140
La classe String
142
Dclaration :
String prnom = new String ("Cline") ;
ou
String prnom = "Cline" ;
143
Comparaison :
String prnom = new String ("Hugo") ; String autrePrnom = new String ("Hugo") ; if (prnom == autrePrnom) System.out.println ("Vrai") ; else System.out.println ("Faux") ; Qu'affichera cette squence d'instructions ?
144
145
IX. L'hritage
Principe : rcuprer du code existant pour le modifier en partie avant de le rutiliser ; Pourquoi ? Pour raccourcir les temps dcriture et de mise-au-point dune application ;
146
L'hritage permet de dfinir une classe drive partir d'une classe existante ; La classe drive hrite des champs et mthodes de la classe de base ; Pas d'hritage multiple en Java : une classe peut hriter d'une seule autre ;
1. Gnralisation - spcialisation
Le mot-cl extends indique la classe-mre :
class Voiture extends Vehicule { } class Velo extends Vehicule { } class VTT extends Velo { }
On dit quune classe-fille (ou sous-classe) spcialise sa classe-mre (ou super-classe) ; Tandis quune classe-mre gnralise sa classefille ;
148
Imaginons que nous ayons besoin d'une classe Pointcol, destine manipuler des points colors d'un plan ; Elle disposera des mmes fonctionnalits que Point et une mthode "colore" charge de dfinir la couleur ;
Nous pouvons maintenant dclarer des variables de type Pointcol : public class TestPointcol // Classe utilisant Pointcol { public static void main (String args[]) { Pointcol pc = new Pointcol() ; pc.initialise (3, 5) ; // Mthode de la classe de base pc.colore ((byte)3) ; // Mthode de la sous-classe pc.deplace (2, -1) ; pc.affiche() ; } }
Remarque
Si on veut ajouter Pointcol une mthode affichec fournissant la fois les coordonnes du point et sa couleur, ceci ne sera pas permis :
public void affichec () { System.out.println ("Je suis en " + x + " " + y) ; System.out.println ("Ma couleur est " + couleur) ;}
Remarque
Pour crire la mthode affichec, on peut s'appuyer sur la mthode affiche de Point :
public void affichec () { // Equivalent this.affiche() ; affichec() ; System.out.println ("Ma couleur est " + couleur) ; }
155
Exercices
1) On dispose de la classe suivante :
class Point { public void initialise (int x, int y) { this.x = x ; this.y = y ; } public void deplace (int dx, int dy) { x += dx ; y += dy ; } public int getX() { return x ; } public int getY() { return y ; } private int x, y ; } Ecrire la classe PointA, drive de Point disposant d'une mthode affiche pour afficher les coordonnes d'un point.
2. Hritage et constructeurs
Si un constructeur d'une classe drive n'appelle pas le constructeur de sa classe de base, c'est le constructeur sans argument de celle-ci qui sera d'abord excut, puis celui de la classe drive ;
158
Exemple 1
class Mere { public Mere() { System.out.println ("Constructeur mre") ; } } class Fille extends Mere { // Pas d'appel explicite : appel par dfaut public Fille() { System.out.println ("Constructeur fille") ; } } public class TestFille { public static void main (String args[]) { Fille a = new Fille() ; } }
Si un constructeur d'une classe drive appelle un constructeur de sa classe de base, il doit obligatoirement s'agir de la premire instruction du constructeur et ce dernier est dsign par le mot-cl super ;
160
Exemple 2
class Mere { private String prenom ; public Mere(String prenom) { this.prenom = prenom ; } } class Fille extends Mere { public Fille(String nom) { super (nom) ; // Appel explicite du constructeur System.out.println ("Constructeur fille") ; } } public class TestFille { public static void main (String args[]) { Fille a = new Fille("Cline") ; } }
Ecrire le code de la classe PointNom, drive de Point, qui disposera d'un constructeur pour dfinir les coordonnes et le nom d'un objet de type PointNom.
Solution
class PointNom extends Point { public PointNom (int x, int y, char nom) { super (x, y) ; this.nom = nom ; } public void affCoordNom() { System.out.print ("Point de nom " + nom + " ") ; affCoord() ; } private char nom ; }
3. Modificateurs de visibilit
Rappel
Une classe possde 2 degrs de visibilit : - public : - (nant) : accessible partout ; accessible par les classes du package ;
164
3. Modificateurs de visibilit
Un attribut ou une mthode possdent 4 degrs de visibilit : public : accessible partout ; (nant) : accessible par les classes du package ; protected : accessible par les classes du package et les classes drives ;
165
4. Redfinition et surcharge
Surcharge = plusieurs mthodes qui portent le mme nom mais qui ont une signature diffrente ; Elles peuvent se trouver dans la mme classe ou dans une classe et ses descendantes ;
166
Redfinition = possibilit de redfinir dans une sous-classe une mthode qui existe dj dans la super-classe (mme signature) ; L'interprteur cherche la mthode invoque partir de la classe concerne et remonte jusqu' la premire rencontre ;
Redfinition public class C extends A { public void methodeX(int k) { } } C possde 1 seule mthode
Exemple
La classe reprsentant redfinit la mthode calculSalaire dj dcrite pour un employ ; Lien vers le programme