package eg.ufe.fabrication;
/**
* Une pièce fabriquée par l'usine.
*/
public abstract class Piece {
private String nom;
public Piece(String nom) {
this.nom = nom;
}
public String getNom() {
return nom;
}
/**
* Retourne le temps total nécessaire à la fabrication de la pièce.
*/
public abstract int getTempsFabrication();
}
Pièce simple :
package eg.ufe.fabrication;
public class PieceSimple extends Piece {
private int tempsFabrication;
public PieceSimple(String nom, int tempsFabrication) {
super(nom);
this.tempsFabrication = tempsFabrication;
}
@Override
public int getTempsFabrication() {
return tempsFabrication;
}
}
Pièce complexe :
package eg.ufe.fabrication;
import java.util.ArrayList;
import java.util.List;
public class PieceComplexe extends Piece {
/**
* Pièces qui composent cette pièce.
*/
private List<Piece> pieces;
/**
* Temps qu'il faut pour assembler les pièces qui
* composent cette pièce.
*/
private int tempsAssemblage;
public PieceComplexe(String nom, int tempsAssemblage) {
super(nom);
this.pieces = new ArrayList<>();
this.tempsAssemblage = tempsAssemblage;
}
/**
* Ajouter une pièce qui compose cette pièce.
* @param piece
*/
public void ajouterPiece(Piece piece) {
pieces.add(piece);
}
@Override
public int getTempsFabrication() {
int tempsTotalFabrication = tempsAssemblage;
for (Piece piece : pieces) {
tempsTotalFabrication += piece.getTempsFabrication();
}
return tempsTotalFabrication;
}
}
package eg.ufe.test;
import eg.ufe.fabrication.PieceComplexe;
import eg.ufe.fabrication.PieceSimple;
public class TestPiece {
public static void main(String[] args) {
// Création des pièces simples
PieceSimple p1 = new PieceSimple("p1", 10);
PieceSimple p2 = new PieceSimple("p2", 15);
PieceSimple p3 = new PieceSimple("p3", 3);
// Création des pièces complexes
PieceComplexe p4 = new PieceComplexe("p4", 5);
p4.ajouterPiece(p1);
p4.ajouterPiece(p2);
PieceComplexe p5 = new PieceComplexe("p5", 25);
p5.ajouterPiece(p3);
p5.ajouterPiece(p4);
System.out.println("Temps de fabrication de p5=" + p5.getTempsFabrication());
}
}
Le polymorphisme est utilisé dans le méthode getTempsFabrication de la classe PieceComplexe, piece.getTempsFabrication() utilise le polymorphisme puisque piece peut être une des 2 classes filles de Piece.