Outils pour utilisateurs

Outils du site


bloc2:prog:poo:classesabstraites

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
bloc2:prog:poo:classesabstraites [2023/04/02 21:44] yvinec.tbloc2:prog:poo:classesabstraites [2023/04/11 12:00] (Version actuelle) – [Concept] admin
Ligne 12: Ligne 12:
  
 Exemple :  Exemple : 
-<code=java>// une classe abstraite A+<code java A.java> 
 +// 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>
 +<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 (...) ; 
 </code> </code>
 ===== 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**, sans pour autant définir leur **fonctionnement interne**;   * On peut placer dans une **classe abstraite** toutes les **fonctionnalités** dont on souhaite disposer dans ses **classes dérivées**, sans pour autant définir leur **fonctionnement interne**;
- 
  
   * 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 les utiliser =====+  * Une classe qui hérite d’une classe abstraite n’est pas tenue de redéfinir toutes les méthodes abstraites (elle peut n’en définir que certaines). Dans ce cas elle demeure elle-même abstraite.
  
-=== Définir la classe abstraite en utilisant le mot-clé "abstract" devant la déclaration de classe. ===+===== Exemples d'utilisation =====
  
-<code=java> +=== Définir une classe abstraite ===
- +
-</code> +
- +
-=== Définir des variables et/ou des méthodes abstraites dans la classe abstraite===+
  
 <code=java> <code=java>
 +public abstract class Classe_A { 
 +    ... 
 +}
 </code> </code>
- +=== Définir des méthodes abstraites ===
-=== Hériter de la classe abstraite dans une classe concrète en utilisant le mot-clé "extends"=== +
 <code=java> <code=java>
 +public  class Classe_A { 
 +    // Bien observer ici qu'il s'agit d'une signature de méthode : 
 +    //    + Pas de corps défini => pas de {} 
 +    //    + Un point-virgule en fin de ligne 
 +    public abstract void uneMethode (liste_de_paramètres); 
 +    ... 
 +}
 </code> </code>
  
-=== Implémenter les méthodes abstraites dans la classe concrète en utilisant le mot-clé "override". ===+=== Hériter de la classe abstraite (rien de nouveau ...) ===
 <code=java> <code=java>
 +public class Classe_B extends Classe_A { 
 +    ... 
 +}
 </code> </code>
  
-=== Utiliser la classe concrète pour instancier des objets et appeler les méthodes héritées de la classe abstraite. ===+=== Implémenter les méthodes abstraites ===
 <code=java> <code=java>
 +public class UneClasse extends Classe_A {
  
 +    @Override
 +    public void uneMethode (liste_de_paramètres) {
 +        // Implémentation de la méthode ... qui n'est plus abstraite
 +    }
 +}
 </code> </code>
 +
  
bloc2/prog/poo/classesabstraites.1680464646.txt.gz · Dernière modification : 2023/04/02 21:44 de yvinec.t