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.