Portefeuilles Duck Mandarina Sur Femme Portefeuille 5tq876ww Portefeuilles Duck Mandarina Sur Femme Portefeuille 5tq876ww

Portefeuilles Duck Mandarina Sur Femme Portefeuille 5tq876ww

Toutes les membres public et protected d'une classe parent sont accessibles à ses classes enfant. En revanche, une classe parent ne peut accéder à ses classes enfant. Lorsque l'on définit une hiérarchie de classes, on cherche donc à répartir les méthodes les plus générales sur les classes parent, et les méthodes les plus spécialisées sur les classes enfant. Ce que l'on appelle "sous-classe" correspond en fait aux classes possédant le plus de méthodes.

Si un champ d'une classe enfant porte le même nom qu'un champ d'une classe parent, alors le champ enfant masque le champ parent. Par défaut, le code de la classe enfant accède au champ enfant. En revanche, le code de la classe parent accède au champ de sa classe. Il est possible pour un code de la classe enfant de lire le champ de la classe parent en utilisant le mot-clé super.

Exemple 80. Accès aux champs d'une super-classe - 1

public  class A {  // déclarée dans le fichier A.java  Casquette be Zalando Heather Innings Roxy Heritage Extra EUwqZYfp
     protected String nom =  Portefeuilles Portefeuille Femme Sur Duck Mandarina "Je suis dans A" ;  
      
     public  void uneMethode() {  
        System.out.println(nom) ;  // imprime "Je suis dans A"  
    }  
}  
  
 public  class B  extendsMix Eastpak Litres Sac Dos 20 Bust À Vert Merge zETqXHq0n A {  // déclarée dans le fichier B.java  
     protected String nom =  "Je suis dans B" ;  
  
     public  void uneAutreMethode() {  
        System.out.println(nom) ;  // imprime "Je suis dans B"  
        System.out.println(super.nom) ;  // imprime "Je suis dans A"  
    }  
}

Notons le comportement suivant, lors d'une assignation.


Le résultat est le suivant, et constitue un grand classique des pièges posés dans les tests d'évaluation en programmation orientée objet.

 > a.nom = Je suis dans A
 > b.nom = Je suis dans B
 > ba.nom = Je suis dans A

S'amuser à écrire des collisions de nom de la sorte est un jeu qui ne doit pas dépasser le cadre de l'écriture d'un poly. On évitera de noter les bonnes pratiques qui ont été sournoisement piétinées dans cet exemple dans le seul but de le rendre incompréhensible : utilisation de champs non privés, collisions de nom pour un champ dans une classe et une extension, etc...

La traduction des deux termes overloading et overriding mène à des choses assez amusantes, et surtout très hermétiques. Conservons donc les termes anglais ici. En toute rigueur, l' overloading n'est pas vraiment du polymorphisme, seul l' overriding l'est. En écrivant cela, je me rends compte que les polémiques entre les différents ayatollah de la programmation orientée objet sont éternelles. Evitons de rentrer dans ces passionnants débats, et expliquons juste les concepts.

L' overload consiste à écrire deux méthodes de même nom dans une même classe, prenant des paramètres différents. C'est une technique très fréquemment utilisée. Quand un appel de méthode est fait, le compilateur commence par établir la liste des méthodes portant le bon nom. Ensuite, il regarde la liste des paramètres, trouve celle des méthodes qui correspond le mieux. Le problème n'est pas aussi simple qu'il y paraît, notamment du fait des mécanismes d'auto-boxing introduits dans Java 5. Cette résolution est effectuée à la compilation . L'utilisation de telle méthode plutôt que telle autre est donc décidée à la compilation , et non pas à l' exécution .

L' override consiste à redéfinir une méthode d'une classe parent dans une classe enfant. C'est cela ce que l'on appelle la surcharge de méthode en français. Le problème est que ce terme est aussi une traduction d'overload... Cette fois, le compilateur place juste les informations nécessaires à la résolution de l'appel de la méthode, qui est faite à l' exécution . Bien souvent, il n'est pas possible, à la compilation, de déterminer quel objet va effectivement être appelé. Ce mécanisme s'appelle aussi late binding ou delayed binding dans la documentation en anglais. Le terme binding signifie lier en anglais, late binding signifie donc que l'appel à la méthode est lié à la méthode appelée de façon tardive, c'est à dire à l' exécution .

Reprenons notre exemple précédent, en le modifiant un peu.


Cette fois-ci nous obtenons le résultat :

 > a.ouSuisJe ? Je suis dans A !
 > b.ouSuisJe ? Je suis dans B...
 > ba.ouSuisJe ? Je suis dans B...

Dans ce cas, la méthode qui doit être appelée est déterminée à l'exécution, et même si un objet de B est déclaré en tant qu'objet de A, ce sont les méthodes de B qui sont appelées.

Enfin notons que les constructeurs ne sont pas des méthodes d'une classe au sens strict, la notion de surcharge n'a donc pas de sens pour eux.

Java langage & API
Retour au blog Java le soir
Cours & Tutoriaux

José Paumard © 2016, tous droits réservés

Table des matières

+ Introduction : un peu d'histoire
+ Programmer en Java
+ Classes Object et String
+ Structure d'une classe
Mandarina Portefeuilles Sur Duck Femme Portefeuille + Noms, opérateurs, tableaux
+ Nombres, précision, calculs
+ Héritage, abstraction, interfaces
1. Introduction
+ 2. Abstraction et encapsulation
+ 3. Héritage
3.1. Définition de l'héritage
3.2. Conséquences pour les membres
3.3. Polymorphisme
3.4. Empêcher l'héritage
4. Classes abstraites
+ 5. Interfaces
+ Packages
+ La De La Zalando Sacs Sacs Sélection Zalando De Sacs Sélection wOxIq8Y
+ Entrées / sorties