Vous êtes sur la page 1sur 69

Plan du Cours

Chapitre 1 : Introduction générale


Chapitre 2 : Les classes et les objets
Chapitre 3 : Les tableaux et les chaînes de caractères
Chapitre 4 : L'héritage et le polymorphisme
Chapitre 5 : Les classes abstraites et les interfaces
Chapitre 6 : Les exceptions

Cours de Programmation Orientée Objet 0


Chapitre 3 :

Les tableaux et les chaînes de


caractères
1. Les tableaux
1.1. Déclaration
int [ ] tab ; //équivalent à int tab [ ];
Couleur rgb_cube [ ][ ][ ] ;

Remarque
Si [ ] suit le type, toutes les variables déclarées seront des
tableaux;

Si [ ] suit le nom de la variable, seule celle-ci est un tableau :

int [ ] premierTableau, deuxiemeTableau;


float troisiemeTableau[ ], variable;

⇒ seule variable n'est pas un tableau. 2


1.2. Création et initialisation

int [ ] vect = {1, 2, 3, 5, 7, 7+4} ;


rgb_cube = new Couleur [256 ][256 ][256] ;
tab = new int [42];
tab [0] = 3;

3
Valeurs par défauts:
Cas de tableaux d’éléments de type primitif: chaque élément
est initialisé selon son type :
0 pour les numériques,
false pour les booléens,
null pour les chaînes de caractères, ….

Cas de tableaux d’éléments objets : chaque élément est


initialisé à null

Les indices d’accès de 0 à taille - 1

4
1.3. Accès aux éléments:

Accès aux éléments d’un tableau créé: tab [ i ]

Le schéma suivant est la bonne manière de représenter


l'accès à tab[i] :

5
1.4. Taille effective d'un tableau
La longueur d’un tab peut être connue grâce à l’attribut length:
nom_tableau.length
Exemple:
for (int i = 0; i < tab.length; i++)
{ int element = tab[i]; … }

1.5. Contrôle de l'indice


En Java, il y a toujours un contrôle de la validité de l'indice.
Lors de l'évaluation d'une expression d’accès à une case comme
tab[i], i est vérifiée
Deux erreurs fréquentes peuvent être détectées et déclenchent
une exception :
6
- NullPointerException, pour indiquer que tab = null,
c'est-à-dire que la variable tab est une référence non valide
⇔ la variable tab a bien été déclarée, mais le tableau
correspondant n’est pas encore créé,
- ArrayIndexOutOfBoundsException, pour indiquer que la
condition (0 <= i < tab.length) n'est pas satisfaite.

7
1.6. Quelques compléments sur les tableaux :

Un tableau est considéré comme un objet


Les tableaux sont toujours manipulés par référence (lors d’un
passage dans une méthode)
La déclaration d'un tableau ne fait qu'associer son identificateur
(ou sa référence) à la valeur null

8
La taille d'un tableau est indiquée lors de sa création par la
primitive new
Un tableau peut être construit sur la base d'un type primitif ou d'un
type construit (classe ou tableau)

Un tableau qui n'est plus référencé est éliminé par le ramasseur-


miettes

9
1.7. Argument et résultat d'une méthode
Un tableau peut être passé comme argument à une méthode. Il
s'agit plutôt du passage de sa référence

Pour passer une variable de type primitif par référence à une


méthode, on la déclare comme un tableau d'un seul élément

Une méthode peut retourner un tableau. On restitue alors une


référence sur le tableau résultat

10
1.8. Les opérateurs appliqués sur les
tableaux
On peut appliquer les opérateurs : =, ==, et !=. La manipulation
concerne plutôt les références des tableaux

11
1.9. Les tableaux à plusieurs dimensions
JAVA permet de gérer des tableaux à plusieurs dimensions
⇒ un tableau de tableaux (de tableaux …)

int mat [ ][ ]; // mat désigne un tableau de int à deux indices


int [ ] mat[ ]; // mat désigne un tableau de int à deux indices
int [ ][ ] mat;// mat désigne un tableau de int à deux indices

Un tableau à 2 indices

un tableau à un indice dont les éléments sont des [références sur
des] tableaux à un indice dont les éléments sont des int.

12
13
Exemple :
int [][] t=new int[5][];
for(int i=0; i<t.length;i++)
t[i]=new int[5 - i];
for(int i=0; i<t.length;i++)
for(int j=0; j<t[i].length;j++)
t[i][j] = i+j;

[0] [1] [2] [3] [4]


t[0] 0 1 2 3 4
t[1] 1 2 3 4
t[2] 2 3 4
t[3] 3 4
t[4] 4
14
1.10. Les tableaux d'objets
Un tableau déclaré à partir d'une classe, contient des références à
des objets de la classe en question.

Chaque élément du tableau représente une référence à un objet.

15
public class TestEtudiant
{
public static void main(String [] args)
{
Etudiant e;
Etudiant t[ ] = new Etudiant [2];
// déclaration d'un tableau de deux éléments
t[0] = new Etudiant (34,"ali",2, "kaki"); // nouvel objet
t[0].changerCouleur("grise");
boolean b= t[0] instanceof Etudiant;
t[1] =t[0]; // deux références pour un même objet
e=t[1]; // on dispose finalement d'un seul objet
}
} 16
2. Les chaînes de caractères

2.1. Les tableaux de char


Représentation 1: sous forme d’un tableau de char.
Chaque caractère est placé dans une case du tableau
sans utiliser de caractères spéciaux comme le '\0'

☻Inconvénients: pas de possibilité d'utiliser des méthodes de


manipulation standard de chaînes.
⇒Représentation rarement utilisée
Représentation 2 : en tant qu’objet de la classe String

17
Exemple:

class TableauChar
{
public static void main(String[ ] arg)
{
char[ ] tableau;
tableau = new char[4];
tableau[0] = 'J';
tableau[1] = 'A';
tableau[2] = 'V';
tableau[3] = 'A';
System.out.println(tableau); //affiche : JAVA
}
}

18
2.2. La classe String
JAVA offre dans sa librairie (API) la classe String, très riche
en fonctionnalités
La classe String offre des objets constants de chaînes.
⇔ Sert à manipuler des chaînes de caractère non modifiables

Déclaration :
//Une 1ère Déclaration possible
String prenom = new String("Pierre");
Vu son utilisation intensive
//Une 2ère Déclaration très utilisée
String prenom = "Pierre";

19
Un objet String est constant:
une fois défini, sa valeur ne peut être modifiée.
En revanche, on peut lui attribuer une nouvelle chaîne de
caractères.

String msg = "Bonjour!";


//on peut ensuite lui affecter une autre chaîne
msg = "nouveau msg";

⇒ la chaîne "Bonjour!" est oubliée et l’objet msg pointe


sur une autre chaîne

20
Concaténation de chaînes:
1er cas : utiliser la méthode concat
String s3 = s1.concat(s2);

2ème cas : utiliser le signe d'addition + pour effectuer


une concaténation :
String mot = message + " et " + "puis s'en vont";

3ème cas : utiliser le symbole +=


String mot += s1 ;

21
class TestString {
public static void main(String [] args)
{ //création et initialisation
String ch1,ch2, ch3;
ch1="Programmation";
ch2=ch1;
System.out.println("ch1: " +ch1);//Programmation
System.out.println("ch2: " +ch2);//Programmation
//Concaténation
ch1+=" en JAVA"; //Création d'un nouvel objet

System.out.println("ch1: " +ch1);//Programmation en JAVA


System.out.println("ch2: " +ch2);//Programmation

Scanner s = new Scanner (System.in);


ch3 = s.nextLine (); //encore un nouvel objet
22
}
Comparaison de chaînes:

L’instruction :
if (str1 == str2) ... //pas d’erreur

⇒ Ne compare pas si les deux chaînes sont égales,


mais si str1 et str2 pointent vers le même objet.

23
Une comparaison de contenus de chaînes :
if (str1.equals(str2)) ...

ou encore: str1.compareTo(str2);
CompareTo retourne la valeur :
- 0 si les deux chaînes sont égales,
- < 0 si str1 < str2,
- >0 si str2 < str1.

24
Remarques :
La méthode equalsIgnoreCase a le même rôle que
equals
mais sans tenir compte de la différence de casse (maj.
et miniscule)

L’utilisation des opérateurs >, >=, <, <= est interdite

25
Longueur d’une chaîne: length()

Par exemple, msg.length() .

Accès à un caractère de la chaîne: charAt(index)


⇒retourne le caractère spécifié de la chaîne spécifiée.
Par exemple, msg.charAt(1) .

Remarque : Le paramètre index peut avoir une valeur comprise


entre 0 et msg.length() - 1.

26
Conversions diverses
Bien que le contenu d'une chaîne ne puisse pas être modifié, il est
possible d'effectuer des conversions en créant une nouvelle
chaîne.

Les méthodes toLowerCase et toUpperCase permettent d'obtenir


une chaîne respectivement en minuscules et en majuscules.

La méthode trim permet d'obtenir une nouvelle chaîne sans espaces


au début ou à la fin.

La méthode replace(oldChar, newChar) permet de remplacer tous


les caractères oldChar d'une chaîne par des caractères newChar.

27
Conversion de caractères, tableaux, entier, etc. vers
chaîne de caractères
valueOf : permet de convertir un caractère, un tableau de
caractères et des valeurs numériques en chaînes de
caractères.
Ces méthodes ont le même nom, mais se différencient
par le type de paramètre qui leur est fourni (char, char[],
double, long, int, float, etc.)
String valueOf(boolean b)
String valueOf(char c)
String valueOf(char[] data)
String valueOf(double d)
String valueOf(float f)
String valueOf(int i)
StringvalueOf(long l) 28
import java.io.*;
public class Test{
public static void main(String args[])
{ double d = 102939939.939;
boolean b = true;
long l = 1232874;
char[]arr ={'a', 'b', 'c', 'd', 'e‘,'f','g' };
System.out.println("Val:"+ String.valueOf(d) );
System.out.println("Val: " + String.valueOf(b) );
System.out.println("Val: " + String.valueOf(l) );
System.out.println("Val: " + String.valueOf(arr));
} }

29
Autres méthodes offertes

int indexOf(char ch) : retourne l'indice de la première


occurrence de ch (considéré comme un caractère) dans la
chaîne (ou –1)

int indexOf(String str) : retourne l'indice du premier caractère de


la première occurrence de str dans la chaîne (ou –1)

30
2.3. La classe StringBuffer

Offre des objets chaînes modifiables : contenu modifiable


Plus flexible que le type string

Les opérateur + (et +=) sont interdits avec les objets de cette
classe
Création : 3 constructeurs possibles:
public StringBuffer() : une chaîne vide de taille 16 car
public StringBuffer(int longueur) : une chaîne vide d'une
capacité indiquée par longueur.
public StringBuffer(String str) : une chaîne recevant le
paramètre str. La capacité de la chaîne est 16 plus la longueur
de str.
31
Autres fonctionnalités offertes par la classe StringBuffer :
int length() : retourne la longueur de la chaîne

void setlenght (int newLong) : permet de spécifier la longueur


d'un StringBuffer.

int capacity() : retourne la taille du tableau associé

StringBuffer append(char c) : ajoute le caractère c à la fin de la


chaîne
StringBuffer append(String str) : ajoute le contenu de l'objet str
à la fin de la chaîne
StringBuffer append(char str[]) : ajoute le contenu du tableau str
à la fin de la chaîne
32
StringBuffer insert(int i, char c) : insère le caractère c à la
position i de la chaîne

StringBuffer insert(int i, String str) : insère le contenu de l'objet


str à la position i de la chaîne

StringBuffer reverse() : inverse la chaîne

Remarque :
La méthode append cache plusieurs méthodes du même nom
permettant d'ajouter des expressions de type char, char[ ],
double, float, int, long, et String.

33
Exemple:

StringBuffer st = new StringBuffer();


st.append("Cours");
st.append(" ");
st.append("de ");
st.append("Java .");
st.insert(9, "HTML et ");

⇒ Un StringBuffer évolue dynamiquement.


⇒ Si on augmente la longueur de son contenu, l'espace
mémoire alloué est automatiquement augmenté.
34
Plan du Cours
Chapitre 1 : Introduction générale
Chapitre 2 : Les classes et les objets
Chapitre 3 : Les tableaux et les chaînes de caractères
Chapitre 4 : L'héritage et le polymorphisme
Chapitre 5 : Les classes abstraites et les interfaces
Chapitre 6 : Les exceptions

35
Chapitre 4 :

L'héritage et le polymorphisme
1. Le concept de l’héritage

1.1. Principe de base

Le concept de l'héritage spécifie une relation de


spécialisation/généralisation entre les classes (Document : livre,
revu, …/Personne : étudiant, employé…)

Lorsqu'une classe D hérite d'une classe B :


D possède toutes les caractéristiques de B et aussi, d'autres
caractéristiques qui sont spécifiques à D
D est une spécialisation de B (un cas particulier)

37
B est une généralisation de D (cas général)
D est appelée classe dérivée (fille)
B est appelée classe de base (mère ou super-classe)
Tout objet instancié de D est considéré, aussi, comme un objet
de type B
Un objet instancié de B n'est pas forcément un objet de type D

Une classe peut hériter de plusieurs classes: héritage multiple


(Exemple : Etudiant et Employé en même temps)

Une classe de base peut être héritée par plusieurs classes


(Exemple : Document)

38
1.2. Intérêts

Facilité de conception

Une optimisation d’écriture de code : en regroupant les


caractéristiques communes entre classes au sein d’une seule.

Facilité d’extension ou d’ajout de nouvelles classes surtout en cas


d’une hiérarchie de classes bien conçue

Rapprochement de la modélisation des systèmes d’informations


aux cas réels.

39
2. L’héritage en JAVA
L'héritage est représenté par la notion d'extension (extends)
Une classe D peut être définie comme étant une extension d'une
autre classe B
Remarque: - Une référence d'objet déclarée de type B peut
référencer un objet de type D
- l'inverse est faux
Pas d'héritage multiple : => possible avec les interfaces
Toutes les classes héritent de la classe Object (même sans
l'indiquer) définie dans le package java.lang de l'API de JAVA.

Object comporte uniquement des méthodes


Tout objet est considéré de type Object

Cours de Programmation Orientée Objet 40


Syntaxe :
[modificateur d'accès] class ClasseDérivée extends
ClasseBase
{
……
}

Cours de Programmation Orientée Objet 41


class Personne
{
private String nom;
private String prenom;
private String adresse;

public void afficher()


{
System.out.println ("le nom est : "+ nom+ “\n son prénom est: “+
prenom+“\n son adresse est:“+adresse);
}
public void changerAdresse (String adr)
{adresse = adr;}
}

Cours de Programmation Orientée Objet 42


class Etudiant extends Personne
{
private int matricule;
private String filiere;
private int niveau;

public void nouvNiveau(int n)


{niveau = n;}
public void changerFiliere (String f)
{filiere = f;}
}

Cours de Programmation Orientée Objet 43


2.1. Définition du constructeur de la classe
dérivée

Le constructeur de la classe de base se charge d'initialiser les


attributs hérités, il est désigné par super( )

Le constructeur de la classe de base est identifié selon les


paramètres de super( )

L'appel du constructeur de la classe de base doit être la première


instruction dans le constructeur de la classe dérivée

Cours de Programmation Orientée Objet 44


A défaut d'appel de super(), il y aura un appel implicite du
constructeur sans paramètres de la classe de base.

⇒ Appel du constructeur sans paramètres :


- Soit celui implémenté par le programmeur (dans ce cas obligatoire
d’avoir un constructeur sans arguments)

- Soit celui par défaut de la classe de base si le programmeur n'a


pas défini de constructeur,

Cours de Programmation Orientée Objet 45


class Personne
{
public Personne (String n, String p, String adr)
{ nom = n, prenom = p; adresse=adr;}

}

class Etudiant extends Personne


{
public Etudiant (String n, String p, String adr, int m, String f, int niv)
{super(n,p,adr);
matricule = m;
filiere=f;
niveau=niv;
}

} Cours de Programmation Orientée Objet 46
2.2. Accès aux membres hérités
(au sein de la classe dérivée)

1er cas : Membres (attributs et méthodes) hérités déclarés


private dans la classe de Base: pas d’accès possible par la
classe Dérivée malgré qu'ils font parti de sa description.

2ème cas : Membres hérités déclarés protected dans la classe de


Base: accès autorisé par la classe Dérivée (accès réservés à
toutes les classes dérivées à tous les niveaux, mais aussi aux
classes du même package)

Un membre hérité est désigné par super.membre (si l'accès est


autorisé)

Cours de Programmation Orientée Objet 47


class Personne
{
protected String nom;
private String prenom;
private String adresse;

public String getPrenom()
{return prenom;}
public String getAdresse()
{return adresse;}

}

Cours de Programmation Orientée Objet 48


class Etudiant extends Personne
{

public String toString()
{
return ("Le nom de l’étudiant est:"+super.nom+
"\n son prénom est:"+super.getPrenom()+
"\n son adresse est :"+super.getAdresse()+
"\n Sa matricule est:"+matricule+ " \n de la
filière"+filiere+"et de niveau:"+niveau);
}

}

Cours de Programmation Orientée Objet 49


3. Redéfinition des méthodes héritées
Une méthode héritée peut être redéfinie dans la classe
dérivée
La redéfinition consiste à conserver l'entête de la méthode et
à proposer un code différent
Lors de la redéfinition d'une méthode, l'appel de l'ancienne
version (celle de la classe de base) est possible par
super.nom_méthode(), et ce dans l'endroit du nouveau code
que le programmeur juge adéquat
super n’est obligatoire que dans le code de la redéfinition
pour appeler la méthode de la classe de base
Si une méthode héritée est redéfinie, c'est uniquement la
nouvelle version qui fait parti de la description de la classe
dérivée
Cours de Programmation Orientée Objet 50
Remarque : Si la méthode définie au niveau de la classe
dérivée est de type différent, ou de paramètres différents,
alors il s’agit d’une nouvelle méthode qui s’ajoute à celle
héritée de la classe de base

En cas d’une conservation totale de l’entête par la méthode


de la classe dérivée :
Le modificateur d’accès peut être changé selon la règle
suivante : du plus restreint au plus large.
Une méthode d’objet ne peut pas être redéfinie par une
méthode de classe

Cours de Programmation Orientée Objet 51


class Etudiant extends Personne
{

public void afficher()
{super.afficher();
System.out.println("\n sa matricule est:"+matricule+ " \n de la
filière"+filiere+"et de niveau:"+niveau);
}

public String toString()


{return ("Le nom de l’étudiant est:"+super.nom+
"\n son prénom est:"+super.getPrenom()+
"\n son adresse est :"+super.getAdresse()+
"\n sa matricule est:"+matricule+ " \n de la filière"+filiere+"et
de niveau:"+niveau);
}
} Cours de Programmation Orientée Objet 52
4. Redéclaration des attributs
Il est possible de déclarer des attributs portant le même nom
dans la classe de Base et dans la classe Dérivée.
Les types et les modificateurs d’accès peuvent aussi varier.

Pour distinguer l’attribut provenant de la classe de base, l’une


des façons suivantes est utilisée :
Le précéder par super
Le précéder par une référence de l’instance en question
((classeBase)this). En réalité, l’instance de la classe
dérivée cache une instance de la classe de base

Remarque: Il s’agit, dans tous les cas d’une solution à éviter car
elle présente beaucoup d’ambiguïté, surtout avec plusieurs
niveaux d’héritage.

Cours de Programmation Orientée Objet 53


Exemple :
class B
{
protected int x, y;
public void afficher()
{ System.out.println("x= "+x+" y= "+y); }
}
class HB extends B
{
private double x;
private int y, z;
public HB(double a,int b)
{
//super();
x=a;z=b;
}
Cours de Programmation Orientée Objet 54
public void afficher()
{
//super.afficher();
System.out.println(" x de base ="+((B)this).x+
" y de base ="+super.y+
" x="+this.x+ " y="+y+ " z="+z); }
}
public class THB
{
public static void main(String [] args)
{
HB hb = new HB(6.5,13);
hb.afficher();
}
}

Cours de Programmation Orientée Objet 55


5. Classe et méthode finales

JAVA permet d'interdire l'héritage d'une classe en la déclarant


avec le modificateur final

JAVA permet d'interdire la redéfinition d'une méthode (si elle est


héritée) en la déclarant avec le modificateur final

Cours de Programmation Orientée Objet 56


6. Références d'objets

Une référence d'une classe de Base peut désigner un objet d'une


classe Dérivée

L'opérateur de casting peut être utilisé pour convertir une


référence déclarée de type classe de Base en une référence de
type classe Dérivée (pour un objet de la classe Dérivée)

Cours de Programmation Orientée Objet 57


Exemple :

public class TestEtudiant


{
public static void main (String [] args)
{
Etudiant e; Personne p1,p2;
p1 = new Etudiant("Favennec", "Lucie","Adr1",12, "LFIG",2);
e=(Etudiant) p1;
e.afficher(); // p1.afficher() ;
p2=e; // p1,p2 et e désignent le même objet
}
}

Cours de Programmation Orientée Objet 58


7. Les règles de visibilité des membres
d’une classe
Les règles de visibilité fonctionnent au niveau des classes à celui
des objets. Un objet peut parfaitement accéder à la méthode
privée d'un autre objet si celui-ci est de la même classe

Le membre hérité est de modificateur public :


Toutes les méthodes de toutes les classes peuvent accéder
au membre hérité, quelque soit leurs emplacements
Le membre hérité est de modificateur private :
Les méthodes de la classe de base (faisant partie de la même
classe de définition de l’attribut en question) sont les seules à
être autorisées à accéder au membre hérité

Cours de Programmation Orientée Objet 59


Le membre hérité est de modificateur protected :
L’accès est permis aux :
méthodes de la classe de base (faisant partie de la même
classe de définition de l’attribut en question)
méthodes des classes dérivées quelque soit leurs
emplacements
méthodes du même package

Le membre hérité est de modificateur friendly :


L’accès est permis aux :
méthodes de la classe de base (faisant partie de la même
classe de définition de l’attribut en question)
méthodes du même package

Cours de Programmation Orientée Objet 60


Classes dérivées Classes du Classes dérivées Classes des
même
Accès : dans le même même dans un autre autres
classe
package package package packages

public X X X X X

protected X X X X

par défaut X X X
(friendly)

private X

Cours de Programmation Orientée Objet 61


8. Le polymorphisme

8.1. Les méthodes polymorphes

Une méthode polymorphe est une méthode déclarée dans une


super-classe et redéfinie par une sous-classe

Les méthodes polymorphes permettent de prévoir des opérations


similaires sur des objets de natures différentes

Les méthodes final ne peuvent être redéfinies et ne sont donc


pas polymorphes

Cours de Programmation Orientée Objet 62


8.2. Définition du polymorphisme
Il s'agit d'invoquer (appeler) des méthodes sans connaître la
nature de l'objet correspondant

L'appel se fait à partir d'une référence du même type que l'objet


correspondant ou de type sa classe de base (on peut remonter à
tous les niveaux de ses classes de base)

Grâce au polymorphisme, une même écriture peut correspondre


à différents appels de méthodes

Exemple :
A a = meth.creationObjet();
// meth renvoie un objet de type A ou d’un type dérivé de A
a.m();
//peut appeler la méthode m() de A ou de n’importe
//quelle sous-classe de A
Cours de Programmation Orientée Objet 63
8.2.1. Mécanisme du polymorphisme

Le polymorphisme est obtenu grâce à un mécanisme


dynamique appelé ″late binding″ (liaison retardée)

La méthode qui sera exécutée est alors déterminée :


Seulement à l’exécution, et pas dès la compilation
Par le type réel de l’objet qui reçoit le message et pas par le
type de la référence qui le désigne (gestion d'un pointeur sur
la description de la classe de l'objet)

Cours de Programmation Orientée Objet 64


8.2.2. Mécanisme de la liaison retardée

Soit C la classe réelle d'un objet o à qui on envoie un message


"o.m()"

Si le code de la classe C contient la définition (ou la


redéfinition) d’une méthode m(), c’est cette méthode qui sera
exécutée
Sinon, la recherche de la méthode m() se poursuit dans la
classe mère de C, puis dans la classe mère de cette classe
mère, et ainsi de suite, jusqu’à trouver la définition d’une
méthode m() qui est alors exécutée

Cours de Programmation Orientée Objet 65


8.2.3. Intérêts du polymorphisme

Le polymorphisme minimise l’écriture du code

Le polymorphisme favorise la propriété d'extension des


applications

On peut créer de nouvelles sous-classes dont les instances


pourront être prises en compte sans toucher aux programmes
déjà écrits

Cours de Programmation Orientée Objet 66


Exemple :
class Personne
{
public void quiEtesVous() {System.out.println("personne");}

}
class Etudiant extends Personne
{
public void quiEtesVous() {System.out.println("étudiant");}

}
class Employe extends Personne
{
public void quiEtesVous() {System.out.println("employé");}

}
Cours de Programmation Orientée Objet 67
public class Polymorphisme
{
public static void main(String [] args)
{Personne p; int x;
System.out.println(″Taper 1,2 ou 3″) ;
Scanner s = new Scanner (System.in);
x = s.nextInt (); //encore un nouvel objet
if (x = =1)
p= new Personne();
else
if (x = = 2)
p = new Etudiant();
else
p = new Employe();
p.quiEtesVous(); //appel polymorphe
}
} Cours de Programmation Orientée Objet 68

Vous aimerez peut-être aussi