Classe vs Interface
J'ai une très simple question:
Quand doit-on décider de l'utilisation de l'Interface ou de la Classe pour une classe spécifique?
Par exemple: dit nous avons 2 classes, le Client et le Médecin.
En Héritage (la classe): nous avons pu définir ces 2 classes d'hériter d'un parent de la classe Personne.
Ne pourrions-nous pas faire de même avec l'Interface? Dit nous avons InterfacePerson et ont à la fois le Client et le Médecin de mettre en œuvre l'interface?
Ainsi, cela a conduit à: quand nous décidons d'utiliser l'un sur l'autre et vice-versa?
OriginalL'auteur hartanto | 2010-02-16
Vous devez vous connecter pour publier un commentaire.
Lire la article de wikipedia
Lire un livre, lire les chapitres sur la programmation orientée objet nouveau
Dans votre exemple,
Person
devrait être une classe, parce qu'il contient détails de mise en œuvre qui sont communs à la fois unDoctor
et unCustomer
.interfaces n'ont pas (et n'ont pas besoin) détails de mise en œuvre, ils ne font que désigner ce objets qui mettent en œuvre eux sont en train de faire. Pas comment. Pourquoi est-ce utile? Parce que lorsque vous êtes à l'aide de l'objet que vous n'avez pas de soins comment qu'il va faire son travail.
Prenons un coup d'oeil à un exemple simple, il y a un interfaces
Comparable
(en Java au moins). Il dénote que ses réalisateurs peuvent être comparés les uns avec les autres. Vous pouvez donc avoir deux classes:Maintenant vous pouvez avoir une commune méthode qui prend tout ensemble d'objets qui mettent en œuvre
Comparable
et appelcomparable1.compareTo(comparable2)
, parce que vous savez qu'ils peuvent effectuer la comparaison, c'est notée par leur interface.OriginalL'auteur Bozho
Une classe d'étendre une autre classe hérite du comportement. D'autre part, la mise en œuvre d'une interface dit juste qu'il faut se comporter de cette façon, mais la classe reste à savoir comment.
En plus de l'héritage simple, les limitations, le code à l'aide des interfaces sont plus faciles à refactoriser et de test, par exemple, fournir une maquette de mise en œuvre pour un accès de base de données d'objet dans les tests unitaires.
Donc, la vraie réponse est que cela dépend de votre conception.
Il se peut que vous utiliser les interfaces pour décrire le comportement, et de l'abrégé des classes parentes de mettre en œuvre le comportement qui peuvent être héritées par les sous-classes. Ou peut-être les sous-classes sont tellement différentes que chaque implémente l'interface dans leur propre chemin.
OriginalL'auteur marklai
Interfaces sont utilisées pour appliquer certaines Méthodes/Propriétés. En un mot, une interface est un ensemble de règles.
Une classe peut être utilisée pour hériter/remplacer la base de la fonctionnalité.
Ont un coup d'oeil à
interface en C#?
OriginalL'auteur Adriaan Stander
Première chose à retenir, les Classes peuvent être instanciés, les Interfaces ne peuvent pas.
Deuxièmement, une Classe ne peut étendre UNE Classe. Les Interfaces ne sont pas limités par ce et donc nous pouvons avoir l'héritage multiple comme
foo est une Personne. Il est aussi un Homme et un Mammifère;
Le seul problème est d'Interfaces ne peuvent pas avoir des variables ou des implémentations de méthodes où une classe(ou classe abstraite d'ailleurs) peut.
En général, je dirais bâton, avec des interfaces et d'éviter les classes abstraites si vous le pouvez.
OriginalL'auteur CheesePls
Dans la modélisation d'objet, on ne devrait pas utiliser l'héritage pour les personnes et leurs rôles. On devrait plutôt modèle avec deux objets associés. C'est, en utilisant la composition à la place de l'héritage.
Donc dans un sens, de trois solutions, de discuter les deux faux: l'héritage et interfaces pour la modélisation des parties et des rôles.
Une classe est un modèle pour un ensemble d'objets. Ces objets ont un comportement, (et souvent) l'état et les caractéristiques. En ce qui concerne le comportement, chaque objet a (implicite) interface déjà: l'ensemble des méthodes qui peuvent être appelées de l'extérieur.
La question devient alors, pourquoi devriez-vous créer un nommé interface, un sous-ensemble de l'interface est déjà prévue par un objet?
OriginalL'auteur aryeh
Tout simplement, vous utilisez des classes quand il y a du code, de la mise en œuvre impliqués et des interfaces pour des descriptions de l'interface. En se référant à des objets dans votre code, préfèrent se référer aux interfaces comme il est plus facile de remplacer la mise en œuvre effective (ou en ajouter de nouvelles et différentes implémentations).
Et oui, les deux Docor et le Client/Patient sont susceptibles de mettre en œuvre ou de prolonger Personne.
OriginalL'auteur Fredrik
Classe Parent est celui qui aura le strict minimum des propriétés communes à l'ensemble de ses sous-classes.
Mais l'Interface est un contrat qui raconte ses implantations à fournir si ce n'est pas une classe abstraite.
Et l'Une différence importante entre une classe et d'interface, c'est que
l'héritage de classe va donner de la relation entre les deux sous-classes.
Où, comme l'implémentation de l'Interface donne une relation entre deux rare classes.
OriginalL'auteur GuruKulki
En C#, l'héritage multiple peut être réalisée par le biais de l'Interface.
Basé sur le u r exigence de l'entreprise s'il est nécessaire que vos besoins de la classe de l'héritage multiple va fwd, puis utiliser l'Interface d'autre de la classe.
Aussi tous les membres de l'interface doit être donné defination dans la classe c'est à dire les membres interface est implémentée par les membres.
OriginalL'auteur Amit
classe suggère que l'objet qui hérite de la classe de base est une sorte de cette classe
si vous utilisez l'interface, il ne montre que votre classe ont en commun certaines de comportement de l'interface décrit
OriginalL'auteur Jack
Pense de l'interface comme un contrat. La classe peut s'engager à le contrat (implémentation de l'interface)
Supposons que vous avez la classe Personne avec des sous-classes Médecin et le Patient. Ensuite, vous avez de l'interface peuvent être traités par la méthode getSymptoms() mis en œuvre par le Patient et le Traitement de l'interface avec la méthode de guérison(Traitable) mis en œuvre par le Médecin. Le plus probable de la cure(Traitable) appellerais getSymptoms() à un point ...
OriginalL'auteur deleted