LES INTERFACES

cs_nicolson Messages postés 29 Date d'inscription mardi 26 février 2002 Statut Membre Dernière intervention 28 janvier 2004 - 4 avril 2003 à 18:55
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017 - 3 sept. 2006 à 16:43
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/11487-les-interfaces

scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017
3 sept. 2006 à 16:43
Et maintenant si la Classe1 est une classe abstraite, on fait comment dans le cas suivant :

internal interface IDuplicable
{
Classe1 Duplicate ();
}

public abstract class Classe1 : IDuplicable
{
// ERROR, Le compilo demande l'implementation de Duplicate
// sauf que l'on ne peut pas faire un new Classe1()
}

public class Classe2 : Classe1
{
public Classe1 Duplicate ()
{
return new Classe2();
}
}
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
8 avril 2003 à 14:54
Ce que tu explique est un cas très particulier de l'utilisation des interfaces. C'est une construction inventée par ce langage C# qui s'appelle IMPLEMENTATION EXPLICITE DES INTERFACES.
La technique normale reste de définir une interface et de l'implémenter simplement (sans préfixer le nom de la fonction par le nom de l'interface)
A quoi sert cette nouvelle technique ? A traiter le cas où une même classe désire implémenter deux interfaces dont les noms de fonction entrent en collision (identiques) TOUT EN AYANT UNE SEMANTIQUE DISTINCTE (sinon une seule implémentation suffit)
C'est bien le cas que tu présente mais il aurait mieux valu l'annoncer
Encore une remarque : Pourquoi est il nécessaire d'avoir une référence du type de l'interface (et non pas du type de la classe) pour appeler les méthodes => car le compilateur ne saurait pas quelle implémentation prendre parmi les deux
Sinon, c'est bien fait ;)
gg00xiv Messages postés 656 Date d'inscription mercredi 22 août 2001 Statut Membre Dernière intervention 11 mars 2005 13
4 avril 2003 à 23:02
toutes les classes dérivent de Object, pas besoin de le préciser ...
bonne explication : 9/10
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
4 avril 2003 à 20:18
Comme l'a expliqué DarkDaemon, les interfaces c'est très proche de l'héritage entre les classes. En C# ou en JAVA, où l'héritage multiple n'existe pas (contrairement au C++), si tu veux que ta classe fille dérive de deux ou n classes mères, il faut que tes classes mères soient des interfaces.

Mais en fait les interfaces servent plutôt à dire: "j'ai un concept applicable à une classe, je définis ce concept dans une interface. Si une classe implémente (terme JAVA) cette interface, alors la classe implémente le concept". Un exemple: une interface pour la sérialisation, si tu implémentes cette interface alors ta classe est sérialisable. Et comme expliqué précédemment, il est possible de cumuler les interfaces donc les concepts attachés.
cs_nicolson Messages postés 29 Date d'inscription mardi 26 février 2002 Statut Membre Dernière intervention 28 janvier 2004 1
4 avril 2003 à 18:55
Ouais c'est cool, j'ai bien compris comment ça marchait (simple et clair) : 9/10
Mais par contre j'ai pas compris à quoi ça servait vraiment... Pourquoi ne pas créer directement un objet Class1 test et faire un test.Fonction... ?
Rejoignez-nous