bloc2:prog:poo:classesabstraites
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| bloc2:prog:poo:classesabstraites [2023/03/29 14:58] – ↷ Nom de la page changé de bloc2:prog:poo:classeabstraites à bloc2:prog:poo:classesabstraites admin | bloc2:prog:poo:classesabstraites [2023/04/11 12:00] (Version actuelle) – [Concept] admin | ||
|---|---|---|---|
| Ligne 12: | Ligne 12: | ||
| Exemple : | Exemple : | ||
| - | <code=java>// une classe abstraite A | + | < |
| + | // une classe abstraite A | ||
| public abstract class A | public abstract class A | ||
| { | { | ||
| Ligne 23: | Ligne 24: | ||
| public abstract void autreMethode (int nombre) ; | public abstract void autreMethode (int nombre) ; | ||
| } | } | ||
| + | </ | ||
| + | <code java B.java> | ||
| + | // une classe qui dérive la classe abstraite A | ||
| + | public class B extends A | ||
| + | { | ||
| + | |||
| + | // implémentation de la méthode abstraite de A : obligatoire, | ||
| + | // sinon B reste abstraite | ||
| + | public void autreMethode (int param) { | ||
| + | ... | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // instanciation d'une classe qui dérive une classe abstraite : OK | ||
| + | B b = new B (...) ; | ||
| </ | </ | ||
| ===== Bénéfices ===== | ===== Bénéfices ===== | ||
| * On peut placer dans une **classe abstraite** toutes les **fonctionnalités** dont on souhaite disposer dans ses **classes dérivées**, | * On peut placer dans une **classe abstraite** toutes les **fonctionnalités** dont on souhaite disposer dans ses **classes dérivées**, | ||
| - | |||
| * On peut utiliser des **classes abstraites** pour simplement empêcher qu’une classe ne soit **instanciée** parce que son existence en tant que classe est **uniquement technique** et ne repose pas sur le besoin de manipuler l’objet en tant que tel. | * On peut utiliser des **classes abstraites** pour simplement empêcher qu’une classe ne soit **instanciée** parce que son existence en tant que classe est **uniquement technique** et ne repose pas sur le besoin de manipuler l’objet en tant que tel. | ||
| + | ===== Règles de construction ===== | ||
| + | * Dès qu’une classe comporte une ou plusieurs méthodes abstraites, elle est abstraite, même si on ne l’indique pas avec le mot-clé « abstract » dans sa définition. | ||
| - | ===== Comment | + | * Une classe qui hérite d’une classe abstraite n’est pas tenue de redéfinir toutes |
| - | === Définir la classe en Abstract Class. | + | ===== Exemples d' |
| - | {{bloc2: | + | === Définir une classe abstraite === |
| - | Il n'est plus possible de l'instancier, la méthode | + | < |
| - | Il faut à présent laisser les méthodes dans la super-classe. | + | public abstract class Classe_A { |
| + | ... | ||
| + | } | ||
| + | </ | ||
| + | === Définir des méthodes abstraites === | ||
| + | < | ||
| + | public | ||
| + | // Bien observer ici qu'il s'agit d'une signature de méthode | ||
| + | // | ||
| + | // + Un point-virgule en fin de ligne | ||
| + | public abstract void uneMethode (liste_de_paramètres); | ||
| + | | ||
| + | } | ||
| + | </ | ||
| - | === Définir | + | === Hériter de la classe abstraite (rien de nouveau ...) === |
| + | < | ||
| + | public class Classe_B extends Classe_A { | ||
| + | ... | ||
| + | } | ||
| + | </ | ||
| - | Nous devons transformer la méthode **print** en **Abstract**, | + | === Implémenter les méthodes abstraites === |
| + | < | ||
| + | public class UneClasse extends Classe_A { | ||
| - | {{bloc2: | + | @Override |
| - | + | | |
| - | Il faut donc supprimer ce qu' | + | // Implémentation de la méthode ... qui n'est plus abstraite |
| - | + | } | |
| - | {{bloc2: | + | } |
| - | + | </ | |
| - | Une fois la méthode | + | |
| - | + | ||
| - | Et pour finir nous devons mettre la pastille **Override** pour ne pas avoir de **conflit** entre les méthodes print de la **classe mère** et de ses **classes filles**. | + | |
| - | {{bloc2: | ||
bloc2/prog/poo/classesabstraites.1680094698.txt.gz · Dernière modification : 2023/03/29 14:58 de admin
