Polymorphisme

Programming, Math · lab

TP N° 5 : Polymorphisme

Langage JAVA

Exercice 1 :

Ecrire les classes nécessaires au fonctionnement du programme suivant (en ne fournissant que les

méthodes nécessaires à ce fonctionnement). N'oubliez pas de commenter votre code :

public class TestFormes {

public static void main(String[] argv) {

Forme[ ] figures = new Forme[3] ;

figures [ 0 ] = new Carre( 2 ) ; // Création d'un carré de 2 cm de coté

figures [ 1 ] = new Cercle( 3 ) ; // Création d'un cercle de 3 cm de rayon

figures [ 2 ] = new Carre( 5.2 ) ; // Création d'un carré de 5,2 cm de coté

for( int i=0 ; i< figures.length ; i++ )

System.out.println( figures[i] +" : surface = "+ figures[i].getSurface() +"

cm2" ) ;

}

}

Sortie de ce programme :

Carré ( coté 2.0 cm ) : surface = 4.0 cm2

Cercle ( rayon 3.0 cm ) : surface = 28.26 cm2

Carré ( coté 5.2 cm ) : surface = 27,04 cm2

Rappel :

 Surface d'un carré = coté*coté

 Surface d'un cercle = Pirayonrayon

Exercice 2 :

Ecrire les classes nécessaires au fonctionnement du programme suivant (en ne fournissant que les

méthodes nécessaires à ce fonctionnement). N'oubliez pas de commenter votre code :

public class TestMetiers {

public static void main(String[] argv) {

Personne[ ] personnes = new Personne[3] ;

personnes [ 0 ] = new Menuisier( "Paul" ) ;

personnes [ 1 ] = new Plombier( "Jean" ) ;

personnes [ 2 ] = new Menuisier( "Adrien" ) ;

for( int i=0 ; i< personnes.length ; i++ ) personnes[i].affiche() ;

}

}

Sortie de ce programme :

Je suis Paul le Menuisier

Publicité

Je suis Jean le Plombier

Je suis Adrien le Menuisier

Page 1

M. LACHGAR Med

Correction :

Arborescence du projet :

Exercice 1 :

Solution 1 :

La classe Forme

package ex1;

public class Forme {

protected double surface;

public Forme(double surface) {

this.surface = surface;

}

public double getSurface() {

return surface;

}

}

La classe Carre

package ex1;

public class Carre extends Forme{

private double cote;

public Carre(double cote) {

super(cote * cote);

this.cote = cote;

}

public String toString(){

return "Carré (coté "+this.cote+" cm) ";

}

}

Page 2

M. LACHGAR Med

La classe Cercle

package ex1;

public class Cercle extends Forme{

private double rayon;

Publicité

public Cercle(double rayon) {

super(Math.PI * Math.pow(rayon, 2));

this.rayon = rayon;

}

public String toString(){

return "Cercle (rayon "+this.rayon+" cm) ";

}

}

Solution 2 :

La classe Forme

public abstract class Forme {

public abstract double getSurface();

}

La classe Carre

public class Carre extends Forme{

private double cote;

public Carre(double cote) {

this.cote = cote;

}

public double getSurface() {

return cote * cote;

}

public String toString(){

return "Carre ( coté "+this.cote +" cm ) :";

}

}

La classe Cercle

public class Cercle extends Forme{

private double rayon;

public Cercle(double rayon) {

this.rayon = rayon;

}

public double getSurface() {

return Math.pow(rayon, 2) * Math.PI;

}

public String toString(){

return "Cercle (rayon "+this.rayon +" cm ) :";

Publicité

}

}

Page 3

M. LACHGAR Med

Exercice 2 :

La classe Personne

package ex2;

public abstract class Personne {

protected String nom;

public Personne(String nom) {

this.nom = nom;

}

public abstract void affiche();

}

La classe Menuisier

package ex2;

public class Menuisier extends Personne {

public Menuisier(String nom) {

super(nom);

}

public void affiche() {

System.out.println("Je suis"+this.nom+" le Menuisier");

}

}

La classe Menuisier

package ex2;

public class Plombier extends Personne{

public Plombier(String nom) {

super(nom);

}

public void affiche() {

System.out.println("Je suis"+this.nom+" le Plombier");

}

}

Page 4

M. LACHGAR Med