java : l'héritage (rappel) Héritage simple : Une classe ne peut hériter que d'une autre classe En C++ possibilités d'héritage multiple Toutes les classes en java forment un arbre d'héritage Dont le sommet est la classe Object Une classe déclarée sans relation d'héritage hérite quand même de Object Pas de limite dans les niveaux d'héritage
java héritage (rappel) Les méthodes et les attributs sont héritées pour tous les niveaux supérieurs une sous -classe définit des attributs et/ou des méthodes : c'est la spécialisation
java : l'héritage (rappel) Définir une classe dérivée extends par défaut : extends Object class CompteBancaire { double solde; // ... void deposer( double montant ) { // … } boolean retirer( double montant ) { } class CompteCheque extends CompteBancaire { double montantDecouvertAutorise; //… boolean retirer(double montant) // … class TestCompteEpargne { public static void main( String [] arg ) { //... CompteEpargne ce; double interet; ce = new CompteEpargne(); ce.deposer( 100.0 ); interet = ce.calculerInterets(); } TestCompteEpargne.java CompteBancaire.java Définissez retirer CompteEpargne.java
java héritage et redéfinition de méthodes Une classe enfant peut redéfinir (override) les méthodes dont elle hérite Elle fournit ainsi des implémentations spécialisées pour celles-ci. Une méthode est redéfinie lorsque : son nom son type de retour ses paramètres sont identiques à ceux de la méthode dont elle hérite
java héritage et redéfinition de méthodes Lors de l'appel à cette méthode pour un objet de cette classe c’est la nouvelle définition et non pas celle de la super-classe qui est invoquée.
java héritage et redéfinition de méthodes public class ClasseA { public void hello() System.out.println(«Hello»); } public void affiche() System.out.println(«Je suis un A»); Fichier classeA.java A a = new A(); B b = new B(); a.hello(); --> Hello a.affiche(); -->Je suis un A public class ClasseB extends ClasseA { public void affiche() System.out.println(«Je suis un B»); } Fichier classeB.java b.hello(); --> Hello b.affiche(); -->Je suis un B
Pour conserver le comportement de la classe parent : java redéfinition de méthodes, réutilisation Pour conserver le comportement de la classe parent : Utilisation du mot clé super associé à la méthode parent : Donnez le résultat public class ClasseB extends ClasseA { public void affiche() System.out.print(«Je suis un B et »); super.affiche() ; } Fichier classeB.java b.hello(); b.affiche(); hello Je suis un B et Je suis un A Appel de la méthode parent affiche()
java redéfinition ou surcharge Attention à ne pas confondre ces deux notions : La surcharge (overloading) S'applique lorsque les paramètres de la méthode ne sont pas identiques en nombre et/ou en type Par contre ne s'applique pas lorsque seul le type de retour n'est pas identique La surdéfinition (overriding) s'applique lorsque Tous les paramètres et le type de retour sont identiques C'est le polymorphisme
java redéfinition ou surcharge exemple public class ClasseA { public void methodX(int i) ... } Fichier classeA.java Surcharge redéfinition public class ClasseB extends ClasseA { public void methodX(double i) ... } Fichier classeB.java public class ClasseC extends ClasseA { public void methodX(int i) ... } Fichier classeC.java Deux méthodes methodX accessibles dans ClasseB Une seule méthode methodX accessible dans ClasseC
Java : surcharge des constructeurs Possibilité de surcharge des constructeurs Avec des types différents de paramètres Un nombre différents de paramètres Possibilité d'accès au constructeur parent Utilisation de super(param1[, param2]) avec param1[, param2] est conforme au constructeur parent