Conception par Objet et Programmation Java

1/26
100%

<!-- Slide number: 1 -->

Conception par Objet et Programmation Java

1

![](Picture6.jpg)

Chapitre 4 : Héritage

Equipe Java

2019-2020

![](Image15.jpg)

Notes:

<!-- Slide number: 2 -->

Plan

2

Introduction

Classe et objet

Encapsulation

Héritage

Polymorphisme

Exceptions

Connexion Base de donnée

Interfaces

Lambda Expression

Collections

Stream

Notes:

<!-- Slide number: 3 -->

Objectifs

3

Savoir identifier le lien entre les classes

Introduire la technique d’héritage : intérêt et

notation .

Introduire les droits d’accès d’une classe dérivée

aux membres de la classe de base.

Comprendre la construction d’un objet dérivé

Maîtriser la notion de redéfinition.

Stream

Notes:

<!-- Slide number: 4 -->

Héritage: Nouveau principe POO

4

Définition:

Technique offerte par les langages de programmation pour construire une classe à partir d’une (ou plusieurs)autre classe en partageant ses attributs et opérations.

Intérêts :

Spécialisation, enrichissement : une nouvelle classe réutilise les attributs et les opérations d ’une classe en y ajoutant et/ou des opérations particulières à la nouvelle classe

Redéfinition : une nouvelle classe redéfinit les attributs et opérations d’une classe de manière à en changer le sens et/ou le comportement pour le cas particulier défini par la nouvelle classe

Réutilisation : évite de réécrire du code existant et parfois on ne possède pas les sources de la classe à hériter

<!-- Slide number: 5 -->

Pourquoi hériter…

5

Pour relier des classes entre elles:

Lorsqu’une classe étend les fonctionnalités d’une autre classe

Lorsqu’une classe adapte le fonctionnement d’une autre classe

à une situation particulière.

Pour exploiter des classes existantes sans en modifier le code

même si ce code est inaccessible.

La documentation de la classe héritée suffit pour organiser le développement.

Regrouper les champs et les méthodes communs à plusieurs classes.

<!-- Slide number: 6 -->

Spécialisation de la classe « Voiture »

6

Un véhicule prioritaire est une voiture avec un gyrophare

Un véhicule prioritaire répond aux mêmes messages que la Voiture

On peut allumer le gyrophare d’un véhicule prioritaire

Une voiture électrique est une voiture dont l’opération de démarrage est différente

Une voiture électrique répond aux même messages que la Voiture

On démarre une voiture électrique en activant un disjoncteur

![](Image2.jpg)

Héritage

<!-- Slide number: 7 -->

Classes et sous-classes

7

Un objet de la classe VehiculePrioritaire ou VoitureElectrique est aussi un objet de la classe Voiture donc il dispose de tous les attributs et opérations de la classe Voiture.

![](Image4.jpg)

<!-- Slide number: 8 -->

Classes et sous-classes : terminologie

8

Définitions

La classe VehiculePrioritaire hérite de la classe Voiture.

Voiture est la classe mère et VehiculePrioritaire la classe fille.

Publicité

Voiture est la super-classe de la classe VehiculePrioritaire.

VehiculePrioritaire est une sous-classe de Voiture.

N.B

Un objet de la classe VehiculePrioritaire ou VoitureElectrique est forcément un objet de la classe Voiture.

Un objet de la classe Voiture n’est pas forcément un objet de la classe VehiculePrioritaire ou VoitureElectrique.

<!-- Slide number: 9 -->

Généralisation et Spécialisation

9

La généralisation exprime une relation « est-un » entre une classe et sa super-classe.

![](Image2.jpg)

L’héritage permet

De généraliser dans le sens abstraction

De spécialiser dans le sens raffinement

<!-- Slide number: 10 -->

Héritage et Java

10

Héritage simple

Une classe ne peut hériter que d’une seule autre classe

Dans certains autres langages (ex : C++) possibilité d’héritage multiple

Utilisation du mot-clé extends après le nom de la classe

Voiture

VehiculePrioritaire

  • gyrophare : boolean

+ allumeGyrophare ()

public class VehiculePrioritaire extends Voiture {

private boolean gyrophare;

...

public void allumeGyrophare() {

gyrophare = true;

}

...

}

<!-- Slide number: 11 -->

Héritage à plusieurs niveaux

11

public class Voiture {

...

public void demarre() {

...

}

}

Voiture

+ demmarer

public class VehiculePrioritaire extends Voiture {

...

public void allumeGyrophare()

{

...

}

}

Ambulance am = new Ambulance(...);

am.demarre();

am.allumeGyrophare();

am.chercher("Raoul");

VehiculePrioritaire

+ allumeGyropahre

public class Ambulance extends VehiculePrioritaire {

private String malade;

...

public void chercher(String ma) {

...

}

}

Ambulance

  • malade : String

+ chercher (String)

<!-- Slide number: 12 -->

Surcharge et redéfinition 1/3

12

L’héritage

Une sous-classe peut ajouter des nouveaux attributs et/ou méthodes à ceux qu’elle hérite (surcharge en fait partie).

Une sous-classe peut redéfinir (redéfinition) les méthodes à ceux dont elle hérite et fournir des implémentations spécifiques pour celles-ci.

Surcharge : possibilité de définir des méthodes possédant le même nom mais dont les arguments (paramètres et valeur de retour) diffèrent.

Des méthodes surchargées peuvent

avoir des types de retour différents à

condition qu’elles aient des

arguments différents

<!-- Slide number: 13 -->

Publicité

Surcharge et redéfinition 2/3

13

Une voiture électrique est une voiture dont l’opération de démarrage est différente

Une voiture électrique répond aux même messages que la Voiture

On démarre une voiture électrique en activant un disjoncteur

Voiture

+ demarre()

VoitureElectrique

  • disjoncteur : boolean

+ demarre()

public class VoitureElectonique extends Voiture {

private boolean disjoncteur;

...

public void demarre() {

disjoncteur = true;

}

...

}

Redéfinition de la méthode

<!-- Slide number: 14 -->

Surcharge et redéfinition 3/3

14

public class Voiture {

public void demarre() {

}

}

Ne pas confondre surcharge et redéfinition. Dans le cas de la surcharge la sous-classe ajoute des méthodes tandis que la redéfinition «spécialise» des méthodes existantes

Surcharge

Redéfinition

public VehiculePriotitaire extends Voiture{

public void demarre(int code) {

}

}

public VoitureElectonique extends Voiture{

public void demarre() {

}

}

VoitureElectronique possède “ au plus ” une méthode de moins que VehiculePrioritaire

VehiculePrioritaire possède “ au plus ” une méthode de plus que VehiculeElectonique

<!-- Slide number: 15 -->

Redéfinition avec réutilisation

15

Intérêt

La redéfinition d’une méthode cache le code de la méthode héritée. Réutiliser le code de la méthode hérité par le mot-clé super.

super permet ainsi la désignation explicite de l’instance d’une classe dont le type est celui de la classe mère.

Accès aux attributs et méthodes redéfinies par la classe courante mais que l’on désire utiliser.

super.nomSuperClasseMethodeAppelee(...)

Exemple de la Voiture : les limites à résoudre

L’appel à la méthode demarre de VoitureElectrique ne modifie que l’attribut disjoncteur

<!-- Slide number: 16 -->

Héritage et construction(1/6)

16

Possibilité comme les méthodes de réutiliser le code des constructeurs de la super-classe

Appel explicite d’un constructeur de la classe mère à l’intérieur d’un constructeur de la classe fille

Utilise le mot-clé super

super(paramètres du constructeur);

Appel implicite d'un constructeur de la classe mère est effectué quand il n'existe pas d'appel explicite. Java insère implicitement l'appel super()

L’appel au constructeur de la superclasse doit se faire absolument en première instruction

<!-- Slide number: 17 -->

Héritage et construction(2/6)

17

Pour initialiser les attributs hérités, le constructeur d’une classe peut invoquer un des constructeurs de la classe mère à l’aide du mot-clé super.

public class VoitureElectrique extends Voiture{

public VoitureElectrique( int puissance, boolean estDemarer, float vitesse) {

super(puissance, estDemarer,vitesse) ;

}

public Voiture( String unNom) {

this (puissance, estDemarer,vitesse) ;

}

}

super doit être la première instruction

Si on ne fait pas d’appel explicite au constructeur de la superclasse, c’est le constructeur par défaut de la superclasse qui est appelé implicitement.

Publicité

<!-- Slide number: 18 -->

Héritage et construction(3/6)

18

Règles

1. L’appel d’un constructeur de la classe mère doit être la

première instruction du constructeur de la classe fille.

2. Il n’est pas possible d’utiliser à la fois un autre constructeur

de la classe et un constructeur de sa classe mère dans la

définition d’un de ses constructeurs.

public class A {

public A ( int x) {

super();

this() ;

}

}

INTERDIT

<!-- Slide number: 19 -->

Héritage et construction(4/6)

19

Constructeur implicite

public class B extends A {

public B( int x ) {

// appel super ( ) implicite

this . x = x ;

. . .

}

}

Si on ne fait pas d’appel explicite au constructeur de la superclasse, c’est le constructeur par défaut de la superclasse qui est appelé implicitement.

Attention :

Dans ce cas, le constructeur sans argument doit être défini dans la super-classe

<!-- Slide number: 20 -->

Héritage et construction(5/6)

20

Constructeur implicite: erreur fréquente

Etape 2: Puis on ajoute un constructeur

Etape 1

public class A {

public int x ;

public A (int x) {

this.x =x;

}

}

public class B extends A {

public int y ;

public B ( int x , int y ) {

this . x = x ;

this . y = y ;

}

}

public class A {

public int x ;

}

public class B extends A {

public int y ;

public B ( int x , int y ) {

this . x = x ;

this . y = y ;

}

}

erreur

Héritage

<!-- Slide number: 21 -->

Héritage et construction(6/6)

21

Solution2:Appel explicite au super

Solution 1: ajout d’un constructeur vide

public class A {

public i n t x ;

public A () {}

public A ( int x ) {

this . x = x ;

}

}

public class B extends A {

public int y ;

public B ( i n t x , i n t y ) {

this . x = x ;

this . y = y ;

Publicité

}

}

public class A {

public i n t x ;

public A ( i n t x ) {

this . x = x ;

}

}

public class B extends A {

public int y ;

public B ( int x , int y ) {

super(x);

this . y = y ;

}

}

Héritage

<!-- Slide number: 22 -->

La Classe Object (1/2)

22

La classe Object est la classe de plus haut niveau dans la hiérarchie d'héritage.

Toute classe autre que Object possède une super-classe

Toute classe hérite directement ou indirectement de la classe Object

Une classe qui ne définit pas de clause extends hérite de la classe Object

Voiture

+ Class getClass()

+ String toString()

+ boolean equals(Object)

+ int hashCode()

public class Voiture extends Object {

...

public Voiture(int p, Galerie g)

{

puissance = p;

moteur = new Moteur(puissance);

galerie = g;

...

}

...

}

Il n'est pas nécessaire d'écrire explicitement extends Object

<!-- Slide number: 23 -->

La Classe Object (2/2)

23

En Java, la racine de l’arbre d’héritage des classes est la classe java.lang.Object

La classe Object n’a pas de variable d’instance ni de

variable de classe.

La classe Object fournit plusieurs méthodes qui sont héritées par toutes les classes sans Exception.

Les plus couramment utilisées sont les méthodes toString et equals

<!-- Slide number: 24 -->

Méthodes et classes finales

24

Définition

Utilisation du mot-clé final

Méthode : interdire une éventuelle redéfinition d’une méthode

public final void demarre();

Classe : interdire toute spécialisation ou héritage de la classe concernée

public final class VoitureElectrique extends Voiture {

...

}

La classe String est finale

<!-- Slide number: 25 -->

Classes abstraites 1/2

25

Une classe abstraite est une classe incomplète. Elle regroupe un ensemble d’attributs et de méthodes mais certaines de ses méthodes ne contiennent pas d'instructions, elles devront être définies dans une classe héritant de cette classe abstraite.

A quoi ça sert ?

En général à définir les grandes lignes du comportement d'une classe d'objets sans forcer l'implémentation des détails de l'algorithme

En java, c'est le mot clef abstract qui permet de qualifier d'abstraite une classe ou une méthode

<!-- Slide number: 26 -->

Classes abstraites 2/2

26

Pourquoi "abstraite" ?

Une classe est abstraite soit parce qu'on n'est pas capable d'écrire l'implémentation de toutes les méthodes, soit parce qu'on ne veut pas créer d'instance de cette classe.

Une sous-classe qui n'implémente pas toutes les méthodes abstraites de sa super-classe est elle-même abstraite. Il faut donc la qualifier d'abstraite.

Quand on ne peut pas écrire d'implémentation pour une méthode donnée, cette méthode est qualifiée d'abstraite. Cela signifie que l'on laisse le soin aux sous-classes d'implémenter cette méthode.

Conception par Objet et Programmation Java

Programming · course

Browse all programmation documents

<!-- Slide number: 1 -->

Conception par Objet et Programmation Java

1

![](Picture6.jpg)

Chapitre 4 : Héritage

Equipe Java

2019-2020

![](Image15.jpg)

Notes:

<!-- Slide number: 2 -->

Plan

2

Introduction

Classe et objet

Encapsulation

Héritage

Polymorphisme

Exceptions

Connexion Base de donnée

Interfaces

Lambda Expression

Collections

Stream

Notes:

<!-- Slide number: 3 -->

Objectifs

3

Savoir identifier le lien entre les classes

Introduire la technique d’héritage : intérêt et

notation .

Introduire les droits d’accès d’une classe dérivée

aux membres de la classe de base.

Comprendre la construction d’un objet dérivé

Maîtriser la notion de redéfinition.

Stream

Notes:

<!-- Slide number: 4 -->

Héritage: Nouveau principe POO

4

Définition:

Technique offerte par les langages de programmation pour construire une classe à partir d’une (ou plusieurs)autre classe en partageant ses attributs et opérations.

Intérêts :

Spécialisation, enrichissement : une nouvelle classe réutilise les attributs et les opérations d ’une classe en y ajoutant et/ou des opérations particulières à la nouvelle classe

Redéfinition : une nouvelle classe redéfinit les attributs et opérations d’une classe de manière à en changer le sens et/ou le comportement pour le cas particulier défini par la nouvelle classe

Réutilisation : évite de réécrire du code existant et parfois on ne possède pas les sources de la classe à hériter

<!-- Slide number: 5 -->

Pourquoi hériter…

5

Pour relier des classes entre elles:

Lorsqu’une classe étend les fonctionnalités d’une autre classe

Lorsqu’une classe adapte le fonctionnement d’une autre classe

à une situation particulière.

Pour exploiter des classes existantes sans en modifier le code

même si ce code est inaccessible.

La documentation de la classe héritée suffit pour organiser le développement.

Regrouper les champs et les méthodes communs à plusieurs classes.

<!-- Slide number: 6 -->

Spécialisation de la classe « Voiture »

6

Un véhicule prioritaire est une voiture avec un gyrophare

Un véhicule prioritaire répond aux mêmes messages que la Voiture

On peut allumer le gyrophare d’un véhicule prioritaire

Une voiture électrique est une voiture dont l’opération de démarrage est différente

Une voiture électrique répond aux même messages que la Voiture

On démarre une voiture électrique en activant un disjoncteur

![](Image2.jpg)

Héritage

<!-- Slide number: 7 -->

Classes et sous-classes

7

Un objet de la classe VehiculePrioritaire ou VoitureElectrique est aussi un objet de la classe Voiture donc il dispose de tous les attributs et opérations de la classe Voiture.

![](Image4.jpg)

<!-- Slide number: 8 -->

Classes et sous-classes : terminologie

8

Définitions

La classe VehiculePrioritaire hérite de la classe Voiture.

Voiture est la classe mère et VehiculePrioritaire la classe fille.

Advertisement

Voiture est la super-classe de la classe VehiculePrioritaire.

VehiculePrioritaire est une sous-classe de Voiture.

N.B

Un objet de la classe VehiculePrioritaire ou VoitureElectrique est forcément un objet de la classe Voiture.

Un objet de la classe Voiture n’est pas forcément un objet de la classe VehiculePrioritaire ou VoitureElectrique.

<!-- Slide number: 9 -->

Généralisation et Spécialisation

9

La généralisation exprime une relation « est-un » entre une classe et sa super-classe.

![](Image2.jpg)

L’héritage permet

De généraliser dans le sens abstraction

De spécialiser dans le sens raffinement

<!-- Slide number: 10 -->

Héritage et Java

10

Héritage simple

Une classe ne peut hériter que d’une seule autre classe

Dans certains autres langages (ex : C++) possibilité d’héritage multiple

Utilisation du mot-clé extends après le nom de la classe

Voiture

VehiculePrioritaire

  • gyrophare : boolean

+ allumeGyrophare ()

public class VehiculePrioritaire extends Voiture {

private boolean gyrophare;

...

public void allumeGyrophare() {

gyrophare = true;

}

...

}

<!-- Slide number: 11 -->

Héritage à plusieurs niveaux

11

public class Voiture {

...

public void demarre() {

...

}

}

Voiture

+ demmarer

public class VehiculePrioritaire extends Voiture {

...

public void allumeGyrophare()

{

...

}

}

Ambulance am = new Ambulance(...);

am.demarre();

am.allumeGyrophare();

am.chercher("Raoul");

VehiculePrioritaire

+ allumeGyropahre

public class Ambulance extends VehiculePrioritaire {

private String malade;

...

public void chercher(String ma) {

...

}

}

Ambulance

  • malade : String

+ chercher (String)

<!-- Slide number: 12 -->

Surcharge et redéfinition 1/3

12

L’héritage

Une sous-classe peut ajouter des nouveaux attributs et/ou méthodes à ceux qu’elle hérite (surcharge en fait partie).

Une sous-classe peut redéfinir (redéfinition) les méthodes à ceux dont elle hérite et fournir des implémentations spécifiques pour celles-ci.

Surcharge : possibilité de définir des méthodes possédant le même nom mais dont les arguments (paramètres et valeur de retour) diffèrent.

Des méthodes surchargées peuvent

avoir des types de retour différents à

condition qu’elles aient des

arguments différents

<!-- Slide number: 13 -->

Advertisement

Surcharge et redéfinition 2/3

13

Une voiture électrique est une voiture dont l’opération de démarrage est différente

Une voiture électrique répond aux même messages que la Voiture

On démarre une voiture électrique en activant un disjoncteur

Voiture

+ demarre()

VoitureElectrique

  • disjoncteur : boolean

+ demarre()

public class VoitureElectonique extends Voiture {

private boolean disjoncteur;

...

public void demarre() {

disjoncteur = true;

}

...

}

Redéfinition de la méthode

<!-- Slide number: 14 -->

Surcharge et redéfinition 3/3

14

public class Voiture {

public void demarre() {

}

}

Ne pas confondre surcharge et redéfinition. Dans le cas de la surcharge la sous-classe ajoute des méthodes tandis que la redéfinition «spécialise» des méthodes existantes

Surcharge

Redéfinition

public VehiculePriotitaire extends Voiture{

public void demarre(int code) {

}

}

public VoitureElectonique extends Voiture{

public void demarre() {

}

}

VoitureElectronique possède “ au plus ” une méthode de moins que VehiculePrioritaire

VehiculePrioritaire possède “ au plus ” une méthode de plus que VehiculeElectonique

<!-- Slide number: 15 -->

Redéfinition avec réutilisation

15

Intérêt

La redéfinition d’une méthode cache le code de la méthode héritée. Réutiliser le code de la méthode hérité par le mot-clé super.

super permet ainsi la désignation explicite de l’instance d’une classe dont le type est celui de la classe mère.

Accès aux attributs et méthodes redéfinies par la classe courante mais que l’on désire utiliser.

super.nomSuperClasseMethodeAppelee(...)

Exemple de la Voiture : les limites à résoudre

L’appel à la méthode demarre de VoitureElectrique ne modifie que l’attribut disjoncteur

<!-- Slide number: 16 -->

Héritage et construction(1/6)

16

Possibilité comme les méthodes de réutiliser le code des constructeurs de la super-classe

Appel explicite d’un constructeur de la classe mère à l’intérieur d’un constructeur de la classe fille

Utilise le mot-clé super

super(paramètres du constructeur);

Appel implicite d'un constructeur de la classe mère est effectué quand il n'existe pas d'appel explicite. Java insère implicitement l'appel super()

L’appel au constructeur de la superclasse doit se faire absolument en première instruction

<!-- Slide number: 17 -->

Héritage et construction(2/6)

17

Pour initialiser les attributs hérités, le constructeur d’une classe peut invoquer un des constructeurs de la classe mère à l’aide du mot-clé super.

public class VoitureElectrique extends Voiture{

public VoitureElectrique( int puissance, boolean estDemarer, float vitesse) {

super(puissance, estDemarer,vitesse) ;

}

public Voiture( String unNom) {

this (puissance, estDemarer,vitesse) ;

}

}

super doit être la première instruction

Si on ne fait pas d’appel explicite au constructeur de la superclasse, c’est le constructeur par défaut de la superclasse qui est appelé implicitement.

Advertisement

<!-- Slide number: 18 -->

Héritage et construction(3/6)

18

Règles

1. L’appel d’un constructeur de la classe mère doit être la

première instruction du constructeur de la classe fille.

2. Il n’est pas possible d’utiliser à la fois un autre constructeur

de la classe et un constructeur de sa classe mère dans la

définition d’un de ses constructeurs.

public class A {

public A ( int x) {

super();

this() ;

}

}

INTERDIT

<!-- Slide number: 19 -->

Héritage et construction(4/6)

19

Constructeur implicite

public class B extends A {

public B( int x ) {

// appel super ( ) implicite

this . x = x ;

. . .

}

}

Si on ne fait pas d’appel explicite au constructeur de la superclasse, c’est le constructeur par défaut de la superclasse qui est appelé implicitement.

Attention :

Dans ce cas, le constructeur sans argument doit être défini dans la super-classe

<!-- Slide number: 20 -->

Héritage et construction(5/6)

20

Constructeur implicite: erreur fréquente

Etape 2: Puis on ajoute un constructeur

Etape 1

public class A {

public int x ;

public A (int x) {

this.x =x;

}

}

public class B extends A {

public int y ;

public B ( int x , int y ) {

this . x = x ;

this . y = y ;

}

}

public class A {

public int x ;

}

public class B extends A {

public int y ;

public B ( int x , int y ) {

this . x = x ;

this . y = y ;

}

}

erreur

Héritage

<!-- Slide number: 21 -->

Héritage et construction(6/6)

21

Solution2:Appel explicite au super

Solution 1: ajout d’un constructeur vide

public class A {

public i n t x ;

public A () {}

public A ( int x ) {

this . x = x ;

}

}

public class B extends A {

public int y ;

public B ( i n t x , i n t y ) {

this . x = x ;

this . y = y ;

Advertisement

}

}

public class A {

public i n t x ;

public A ( i n t x ) {

this . x = x ;

}

}

public class B extends A {

public int y ;

public B ( int x , int y ) {

super(x);

this . y = y ;

}

}

Héritage

<!-- Slide number: 22 -->

La Classe Object (1/2)

22

La classe Object est la classe de plus haut niveau dans la hiérarchie d'héritage.

Toute classe autre que Object possède une super-classe

Toute classe hérite directement ou indirectement de la classe Object

Une classe qui ne définit pas de clause extends hérite de la classe Object

Voiture

+ Class getClass()

+ String toString()

+ boolean equals(Object)

+ int hashCode()

public class Voiture extends Object {

...

public Voiture(int p, Galerie g)

{

puissance = p;

moteur = new Moteur(puissance);

galerie = g;

...

}

...

}

Il n'est pas nécessaire d'écrire explicitement extends Object

<!-- Slide number: 23 -->

La Classe Object (2/2)

23

En Java, la racine de l’arbre d’héritage des classes est la classe java.lang.Object

La classe Object n’a pas de variable d’instance ni de

variable de classe.

La classe Object fournit plusieurs méthodes qui sont héritées par toutes les classes sans Exception.

Les plus couramment utilisées sont les méthodes toString et equals

<!-- Slide number: 24 -->

Méthodes et classes finales

24

Définition

Utilisation du mot-clé final

Méthode : interdire une éventuelle redéfinition d’une méthode

public final void demarre();

Classe : interdire toute spécialisation ou héritage de la classe concernée

public final class VoitureElectrique extends Voiture {

...

}

La classe String est finale

<!-- Slide number: 25 -->

Classes abstraites 1/2

25

Une classe abstraite est une classe incomplète. Elle regroupe un ensemble d’attributs et de méthodes mais certaines de ses méthodes ne contiennent pas d'instructions, elles devront être définies dans une classe héritant de cette classe abstraite.

A quoi ça sert ?

En général à définir les grandes lignes du comportement d'une classe d'objets sans forcer l'implémentation des détails de l'algorithme

En java, c'est le mot clef abstract qui permet de qualifier d'abstraite une classe ou une méthode

<!-- Slide number: 26 -->

Classes abstraites 2/2

26

Pourquoi "abstraite" ?

Une classe est abstraite soit parce qu'on n'est pas capable d'écrire l'implémentation de toutes les méthodes, soit parce qu'on ne veut pas créer d'instance de cette classe.

Une sous-classe qui n'implémente pas toutes les méthodes abstraites de sa super-classe est elle-même abstraite. Il faut donc la qualifier d'abstraite.

Quand on ne peut pas écrire d'implémentation pour une méthode donnée, cette méthode est qualifiée d'abstraite. Cela signifie que l'on laisse le soin aux sous-classes d'implémenter cette méthode.