Si vous regardez la documentation d'une classe java, par exemple celle de la classe Integer, vous remarquerez qu'elle possède plusieurs constructeurs, qui différent par leurs paramètres. C'est un exemple de la surcharge autorisée par Java : une méthode peut exister en plusieurs versions portant le même nom et différant par les paramètres qu'elles attendent. C'est ce qu'on appelle la surchage de méthode. Les différentes versions de la même méthode doivent pouvoir être distinguées sans ambiguïté par leurs paramètres.
Par exemple on peut enrichir la classe Boite de deux autres constructeurs :
//fichier Boite.java class Boite{ int profondeur,largeur,hauteur; boolean pleine; Boite(){ profondeur=10; hauteur=10; largeur=10; pleine=true; //constructeur d'une boite par defaut : cube d'arete 10 pleine } Boite(int p,int l,int h){ profondeur=Math.abs(p); largeur=Math.abs(l); hauteur=Math.abs(h); pleine=true; // constructeur d'une boite sur mesure pleine } Boite(int p,int l,int h,boolean etat){ profondeur=p; largeur=l; hauteur=h; pleine=etat; // constructeur d'une boite sur mesure avec un état choisi } Boite(Boite modele){ profondeur=modele.profondeur;// la profondeur (de l'objet créé) sera égale à celle de son modèle largeur=modele.largeur; //de même pour les autres champs hauteur=modele.hauteur; pleine=modele.pleine; // constructeur d'une boite par copie d'une autre boite } }Utilisation de ces différents constructeurs dans un programme:
//fichier CreeDboites.java class CreeDboites{ public static void main(String[] args){ Boite boite=new Boite(200,100,50); // construit une boite pleine de dimensions 200 x 100 x 50 appelée boite System.out.println("profondeur: "+boite.profondeur); // affichage System.out.println("largeur: "+ boite.largeur); // des valeurs System.out.println("hauteur: "+boite.hauteur); //des champs System.out.println("pleine: "+ boite.pleine); // de boite Boite boite1=new Boite(200,100,50,false); // construit une boite vide de dimensions 200 x 100 x 50 appelée boite1 System.out.println("profondeur: "+boite1.profondeur); // affichage System.out.println("largeur: "+ boite1.largeur); // des valeurs System.out.println("hauteur: "+boite1.hauteur); //des champs System.out.println("pleine: "+ boite1.pleine); // de boite1 Boite boite2=new Boite(); // construit une nouvelle boite ayant les caractéristiques par défaut System.out.println("profondeur: "+boite2.profondeur); // affichage System.out.println("largeur: "+ boite2.largeur); // des valeurs System.out.println("hauteur: "+boite2.hauteur); //des champs System.out.println("pleine: "+ boite2.pleine); // de boite2 Boite boite3=new Boite(boite1); // construit une nouvelle boite par copie de boite1 System.out.println("profondeur: "+boite3.profondeur); // affichage System.out.println("largeur: "+ boite3.largeur); // des valeurs System.out.println("hauteur: "+boite3.hauteur); //des champs System.out.println("pleine: "+ boite3.pleine); // de boite3 } }