← (précédent) C.5 Héritage et Polymorphisme |
C.7 Des classes particulières → |
Accueil ↔ S O M M A I R E |
C.6 Exercices corrigés de P.O.O (2) |
Exercice 1 : Héritage Ecrivez une classe Felins avec 5 caractériqtiques et 2 comportements des félins. Puis écrivez 2 classes dérivés de Felins. Choisissez 2 sous-espèces de félins (Exemple : chat, tigre, léopard, panthere, lynx, guépard, lion, jaguard, puma, etc... ). Pour chacune des 2 classes, 2 caractéristiques propres et 2 comportements propres. Les comportements sont des méthodes. Ces méthodes seront toutes de type void et auront une seule instruction réduite à l' affichage du comportement. Pour se documenter, regardez le site suivant F E L I N S Vous pouvez aussi faire des recherches sur Wikipedia. Par exemple, tapez sur le moteur google Lion wikipedia |
Les classes : 1. class Felin 2. { 3. String formeTete = "arrondie"; 4. String vue = "perçante"; 5. String oreilles = "fines"; 6. String taille = "svelte"; 7. int nombreDents = 30; 8. 9. public void voir() 10. { 11. System.out.println("Mes pupilles s' adaptent aux variations de la lumière"); 12. } 13. 14. public void manger() 15. { 16. System.out.println("Je suis un carnivore"); 17. } 18. } 19. 20. 21. class Chat extends Felin 22. { 23. double poids = 5; // poids moyen en kilos 24. int nombreOs = 250; 25. 26. public void moncri() 27. { 28. System.out.println("Je miaule"); 29. } 30. 31. public void sauter() 32. { 33. System.out.println("Je peux sauter à une hauteur, 5 fosi supérieure à ma taille"); 34. } 35. } 36. 37. class Tigre extends Felin 38. { 39. int longevite = 16; //moyenne en années 40. int population : 3500; // nombre d' individus 41. 42. public void QuantiteMangee() 43. { 44. System.out.println("Je peux manger jusqu' à 50 kilos de viande en un seul repas"); 45. } 46. 47. public void sociabilite() 48. { 49. System.out.println("Je suis plutôt solitaire"); 50. } 51. 52. } |
Exercice 2 : polymorphisme et redéfinition d' une méthode Prévoir l' affichage du programme ci-dessous en expliquant pourquoi. |
Le programme : 1. class Felin 2. { 3. public void comportement() 4. { 5. System.out.println("se comporter comme un félin"); 6. } 7. } 8. 9. class Chat extends Felin 10. { 11. 12. } 13. 14. 15. 16. 17. class Tigre extends Felin 18. { 19. public void comportement() 20. { 21. System.out.println("se comporter comme un tigre"); 22. } 23. } 24. 25. class TigreSiberie extends Tigre 26. { 27. public void comportement() 28. { 29. System.out.println("se comporter comme un tigre deSiberie"); 30. } 31. } 32. 33. class ChatPekinois extends Chat 34. { 35. 36. } 37. 38. 39. 40. 41. class TigreBengale extends Tigre 42. { 43. 44. } 45. 46. 47. 48. 49. 50. public class TesterFelins 51. { 52. public static void main(String [] args) 53. { 54. Felin f = new Felin(); 55. f.comportement(); 56. System.out.println(); 57. 58. Chat c = new Chat(); 59. c.comportement(); 60. f = c; 61. f.comportement(); 62. System.out.println(); 63. 64. Tigre t = new Tigre(); 65. t.comportement(); 66. f = t; 67. f.comportement(); 68. System.out.println(); 69. 70. TigreSiberie ts = new TigreSiberie(); 71. f = ts; 72. f.comportement(); 73. t = ts; 74. t.comportement(); 75. System.out.println(); 76. 77. ChatPekinois cp = new ChatPekinois(); 78. cp.comportement(); 79. f = cp; 80. f.comportement(); 81. c = cp; 82. cp.comportement(); 83. System.out.println(); 84. 85. TigreBengale tb = new TigreBengale(); 86. f = tb; 87. f.comportement(); 88. t = tb; 89. t.comportement(); 90. 91. } 92. } |
Si vous compilez et exécutez ce programme, il sera affiché : se comporter comme un félin se comporter comme un félin se comporter comme un félin se comporter comme un tigre se comporter comme un tigre se comporter comme un tigre deSiberie se comporter comme un tigre deSiberie se comporter comme un félin se comporter comme un félin se comporter comme un félin se comporter comme un tigre se comporter comme un tigre explications : En ligne 54, je crée un objet Felin. Puis à la ligne 55, j' applique la méthode comportement(). Java recherche la méthode comportement() définie dans la classe quia permis de créer l' objet f. Et c' est la classe Felin. Donc, c' est sa méthode qui est utilisée. D' où l' affichage : se comporter comme un félin En ligne 57, on crée un objet Chat. Puis on applique la méthode comportement() en ligne 58. Comme cette méthode n' existe pas dans la classe Chat , java va la chercher dans la classe mère. Et c' est la classe Felin. Donc, c' est la méthode comportement() de la classe Felin qui est utilisée. D' où à l' affichage : se comporter comme un félin En ligne 60, je prends la référence c de l' objet new Chat, que je mets dans la variable f. f pointe maintenant vers l' objet de type Chat. Puis en ligne 61, j' applique la méthode comprtement(). Bien que f soit de type Felin, java va quand même chercher la méthode comportement() de la classe Chat. Puisque c' est la méthode de la classe de l' objet qui compte. Et pas la méthode de la classe de la référence. Mais comme la classe Chat ne possède pas de méthode comportement(), java va la chercher dans la classe mère qui est Felin. En fin de compte, c' est donc la méthode de la classe Felin qui est utilisée. D' où à l' affichage : se comporter comme un félin En ligne 64, on crée un objet de type Tigre. En ligne 65, on applique la méthode comportement à cet Objet. C' est la méthode comportement() de la classe Tigre qui est appelée. D' où à l ' affichage : se comporter comme un félin En ligne 66, je mets la référence de l' objet Tigre dans la référence de type Felin. Puis en ligne 67, j' applique la méthode comportement() à f. Puisque f contient la référence d' un objet Tigre, c' est la méthode comportement() de la classe Tigre qui est appelée. D' où l' affichage se comporter comme un félin Faîtes un effort de comprendre le reste en utilisant le même raisonnement. |
Exercice 3 : polymorphisme et sur-définition d' une méthode Prévoir l' affichage du programme ci-dessous en expliquant pourquoi. |
Le programme : 1. class Alpha 2. { 3. public void afficher(double d) 4. { 5. System.out.println("renvoyer double de alpha : " + d); 6. } 7. } 8. 9. class Beta extends Alpha 10. { 11. 12. } 13. 14. class Gamma extends Alpha 15. { 16. public void afficher(long l) 17. { 18. System.out.println("renvoyer long de gamma : " + l); 19. } 20. } 21. 22. class Delta extends Gamma 23. { 24. public void afficher(int i) 25. { 26. System.out.println("renvoyer int de delta : " + i); 27. } 28. } 29. 30. class Omega extends Gamma 31. { 32. public void afficher(float f) 33. { 34. System.out.println("renvoyer float de omega : " + f); 35. } 36. 37. public void afficher(int i) 38. { 39. System.out.println("renvoyer int de omega : " + i); 40. } 41. } 41. 42. 43. public class TesterSurdefinitionETpolymorphisme 44. { 45. public static void main(String [] args) 46. { 47. byte b = 1; short s = 5; int i = 22; long l = 44; 48. float f = 2.5f; double d = 33.01; 48. 49. Alpha a = new Alpha(); 50. a.afficher(b); 51. a.afficher(f); 52. System.out.println(); 53. 54. Beta b = new Beta(); 55. b.afficher(b); 56. b.afficher(f); 57. 58. a = b; 59. a.afficher(b); 60. a.afficher(f); 61. System.out.println(); 62. 63. Gamma g = new Gamma(); 64. g.afficher(b); 65. g.afficher(l); 66. g.afficher(f); 67. a = g; 68. a.afficher(b); 69. a.afficher(l); 70. a.afficher(f); 71. System.out.println(); 72. 73. Delta d = new Delta(); 74. d.afficher(b); 75. d.afficher(l); 76. d.afficher(d); 77. a = g; 78. a.afficher(b); 79. a.afficher(l); 80. a.afficher(d); 81. System.out.println(); 82. 83. Omega o = new Omega(); 84. o.afficher(b); 85. o.afficher(i); 86. o.afficher(f); 87. o.afficher(d); 88. 89. a = 0; 90. a.afficher(b); 91. a.afficher(i); 92. a.afficher(f); 93. a.afficher(d); 94. 95. g = o; 96. g.afficher(b); 91. g.afficher(i); 92. g.afficher(f); 93. g.afficher(d); 95. } 96. } |
← (précédent) C.5 Héritage et Polymorphisme |
C.7 Des classes particulières → |
Accueil ↔ S O M M A I R E |
C.6 Exercices corrigés de P.O.O (2) |