1. Introduction au C#
Héritage - Polymorphisme - Interface
M. DIENG Abdoulaye
2. Sommaire
2
1. Héritage
2. Constructeurs et héritage
3. Redéfinition de méthodes
4. Polymorphisme
5. Classe abstraite
6. Interface
3. Héritage
• À la différence de C++ : pas d’héritage multiple
• Syntaxe
class NomClasseFille : NomClasseMere{
// Déclaration des nouveaux attributs
// Définition des nouvelles méthodes
// Redéfinition de méthodes
...
}
• Exemple (Un rectangle coloré est un rectangle)
class RectangleCol : Rectangle{
int couleur;
...
}
3
app1
4. Constructeurs et héritage
• Le constructeur de la classe de base est appelé avant le
constructeur de la classe dérivée.
• Syntaxe du constructeur d’une sous classe
NomClasseFille(<parametres>)
// appel du constructeur de la mère
: base(<arguments>)
{
// autres opérations
}
4
app2
5. Redéfinition de méthodes
• Une sous-classe peut redéfinir les méthodes héritées pour
leur fournir des implémentations spécifiques
• Exemple : on démarre une voiture électrique en activant un
disjoncteur
• On redéfinit une méthode, en utilisant le mot clé new.
• Syntaxe : [accès] new typeRslt nomMethode([args]){…}
• L’accès de la méthode de base doit être conservée
• Le code d’une méthode redéfinie peut appeler la méthode de
la classe mère à l’aide du mot clé base.
• Syntaxe : base.nomMethode([args]) 5
app3
6. Polymorphisme
• Le polymorphisme désigne la faculté pour une référence, un
opérateur ou une méthode de se comporter différemment
suivant le contexte
• Le polymorphisme permet d'utiliser le type réel de l'objet
référencé plutôt que le type de la référence pour déterminer la
méthode ou la propriété à utiliser
• Comme C++, C# utilise par défaut la liaison statique
• Pour une liaison dynamique :
– comme en C++, utiliser le mot clé virtual dans la déclaration
de la méthode de la classe de base.
– remplacer new par override dans une classe dérivée
6
app4
7. Classe abstraite
• Pb : certaines méthodes sont « trop » générales pour pouvoir
être implémentées.
Exemple : un cercle et un rectangle ont tous une aire, mais la
méthode de calcul est différente d’une figure à l’autre.
• Solution : déclarer la méthode aire() dans la classe parente
Figure sans lui donner d’implémentation.
• Déclaration d’une méthode abstraite ou virtuelle pure :
accès abstract typeRetour nomMéthode([arg]);
• L’accès à une méthode abstraite n’est jamais privé et se
conserve lors de l’implémentation
• Classe abstraite : contient au moins une méthode abstraite
• Déclaration d’une classe abstraite : abstract class nomClasse
{…}
• Une classe abstraite ne doit pas être instanciée.
7
app5
8. Interface
• Interface = ensemble de méthodes sans implémentation
• Déclaration : interface INomInterface{…}
• Dans la déclaration des méthodes d’une interface :
– pas de qualificatif d’accès
– nom de tout éventuel argument
• Une classe peut implémenter plusieurs interfaces
Syntaxe : class NomClasse : INomInt1[,INomInt2, …]{…}
• Toute classe non abstraite qui implémente une interface doit
implémenter toutes les méthodes proposées
• Une classe qui implémente une interface peut avoir ses propres
méthodes.
• Une interface peut hériter d'une autre interface.
8
app6