Le concept et l'utilisation de l'interface Java <Br /> Dans une classe abstraite, une ou plusieurs méthodes abstraites peuvent être incluses;
Le mot-clé d'interface est déclaré, qui peut être considéré comme une classe abstraite spéciale qui spécifie ce que doit faire une classe, plutôt que de spécifier comment elle le fait.
Il existe également de nombreux exemples d'interfaces en réalité, telles que les disques durs de l'ordinateur en série. Le comité de l'ATA en série n'est pas responsable de la production de disques durs, mais spécifie uniquement les spécifications communes.
Seagate, Hitachi, Samsung et d'autres fabricants produiront des disques durs qui répondent à l'interface en fonction des spécifications, et ces disques durs peuvent être généralisés. 320G SEAGATE SERIE DISK et l'installer.
Le code suivant peut simuler le comité ATA en série pour définir l'interface de disque dur en série suivant:
// Interface du disque dur de série Satahdd {// Nombre de lignes de connexion publiques static final connect_line = 4;Remarque: Les variables membre déclarées dans l'interface sont toutes finales statiques publiques par défaut et doivent être affichées initialisées. Par conséquent, ces modificateurs peuvent être omis lors de la déclaration des constantes.
Les interfaces sont une collection de plusieurs constantes et méthodes abstraites, qui semblent actuellement similaires aux classes abstraites. En effet, les interfaces ont évolué à partir de classes abstraites, donc sauf indication contraire, les interfaces bénéficient du même «traitement» que les classes. Par exemple, plusieurs classes ou interfaces peuvent être définies dans le programme source, mais dans le plus une classe publique ou une interface peut être disponible. Comme le format d'héritage d'une classe, les interfaces peuvent également être héritées et les sous-interfaces peuvent hériter des constantes et des méthodes abstraites dans l'interface parent et ajouter de nouvelles méthodes abstraites, etc.
Cependant, l'interface a ses propres caractéristiques, résumées comme suit.
1) Seules les méthodes abstraites peuvent être définies dans l'interface. Essayer de définir des variables d'instance, des méthodes d'instance non abstrait et des méthodes statiques dans une interface sont toutes illégales. Par exemple:
Interface publique Satahdd {// Le nombre de lignes de connexion publique intraticline; être de type public // lisez les données publiques static statistique readdata () {// Erreur de compilation, l'interface ne peut pas contenir la méthode statique return "data";3) Il n'y a pas de constructeur dans l'interface et ne peut pas être instancié.
4) Une interface n'implémente pas une autre interface, mais peut hériter de plusieurs autres interfaces. La fonctionnalité multi-inhérenance de l'interface compense l'héritage unique de la classe. Par exemple:
// Interface du disque dur de série Satahdd étend A, b {// Nombre de lignes de connexion publiques statiques finals connect_line = 4; Interface a {public void a ();} interface b {public void b ();}Pourquoi utiliser l'interface
Dans le développement de projets à grande échelle, il peut être nécessaire d'insérer une classe à partir du milieu de la chaîne d'héritage pour permettre à ses sous-classes d'avoir certaines fonctions sans affecter leurs classes de parents. Par exemple, a -> b -> c -> d -> e, a est une classe d'ancêtre. classe. Mais le problème est que Java est un seul langage d'héritage. De cette façon, les modifications des classes C, D et E affectent l'ensemble de la chaîne d'héritage et ne sont pas enfichables.
L'interface est une garantie d'insertabilité. Toute classe d'une chaîne d'héritage peut implémenter une interface, qui affectera toutes les sous-classes de cette classe, mais n'affectera aucune classe parent de cette classe. Ces classes devront implémenter les méthodes spécifiées par cette interface, et les sous-classes peuvent hériter automatiquement de ces méthodes de cette classe, et à ce moment, ces sous-classes sont enfichables.
Ce qui nous intéresse n'est pas une classe spécifique, mais si cette classe implémente l'interface dont nous avons besoin.
L'interface fournit des appels d'interpolation et de méthode.
Les interfaces jouent un rôle important dans la programmation Java orientée objet. En fait, l'une des tâches les plus importantes au stade de conception consiste à concevoir les interfaces de chaque partie, puis à former la structure du cadre de base du programme à travers la combinaison des interfaces.
Utilisation des interfaces
L'utilisation des interfaces est quelque peu différente de celle des classes. Lorsque vous devez utiliser une classe, le nouveau mot-clé sera utilisé directement pour créer une instance d'une classe, mais l'interface ne peut pas être utilisée comme celle-ci car l'interface ne peut pas utiliser directement le nouveau mot-clé pour créer une instance.
Une interface doit implémenter ses méthodes abstraites via une classe, puis instancier la classe. Le mot-clé de l'interface d'implémentation de classe est des outils.
Si une classe ne peut pas implémenter toutes les méthodes abstraites de l'interface, la classe doit être définie comme une méthode abstraite.
Une instance d'une interface ne peut pas être créée, mais une variable de référence du type d'interface peut être définie, qui pointe vers une instance de la classe qui implémente l'interface.
Une classe ne peut hériter qu'une classe parent, mais peut implémenter plusieurs interfaces.
Le format de l'interface d'implémentation est le suivant:
Classe de modificateur Le nom de classe étend la classe Parent implémente plusieurs interfaces {
Méthode d'implémentation
}
Veuillez consulter l'exemple suivant:
Importer statique java.lang.System. Samsung Hard Disk}} // Interface de disque dur série SATAHDD {// Nombre de lignes de connexion publiques statiques final Int Connect_line = 4; ;} / / Réparer l'interface du disque dur Fixhdd {// Adresse de réparation Adresse = "Haidian District, Beijing"; String ReadData () {return "Data";} // Seagate Hard Drive WRITEData (String Data) {Out.println ("Écrire réussi"); // classe du disque dur Samsung Samsunghdd implémente satahdd {// le disque dur de Samsung ReadData () {return "data"; Un disque dur de mauvaise qualité ne peut pas écrire les données Résumé La classe XXHDD implémente satahdd {// disque dur lit les données de la chaîne publique readdata () {return "data";Utilisez l'interface comme type
L'interface est utilisée comme type de référence. Déterminez qu'il devrait être quelle méthode de classe est utilisée appelle réellement la méthode de classe d'implémentation correspondante.
Les exemples sont les suivants:
Classe publique Demo {public Void test1 (a a) {a.doSth ();} public static void Main (String [] args) {Demo d = new Demo (); A) Résultats en cours:
maintenant en b
Comme vous le voyez, les interfaces peuvent être utilisées comme type, en utilisant les interfaces comme paramètres de méthodes et types de retour.
La différence entre l'interface Java et les classes de classe abstraite <BR /> sont des modèles d'objets, et les classes et les interfaces abstraites peuvent être considérées comme des modèles de classes en béton.
Depuis dans un certain point de vue, les interfaces sont une classe abstraite particulière, ils ont un lien profond et ont de grandes similitudes, il est donc facile d'être confus quant à qui utiliser. Nous analysons d'abord les similitudes dont ils disposent.
Ils représentent tous des couches abstraites de structures en forme d'arbres. Lorsque vous utilisez des variables de référence, essayez d'utiliser la couche abstraite de la structure de la classe pour séparer la définition et la mise en œuvre de la méthode.
Aucun d'eux ne peut être instancié.
Tout peut contenir des méthodes abstraites. Des méthodes abstraites sont utilisées pour décrire les fonctions que fournit le système sans avoir à se soucier des implémentations spécifiques.
Parlons des principales différences entre les classes abstraites et les interfaces.
1) Les classes abstraites peuvent fournir des implémentations pour certaines méthodes, en évitant les implémentations répétées de ces méthodes dans les sous-classes et l'amélioration de la réutilisation du code.
Public Résumé Classe A {Public Abstract Void Method1 (); Public Void Method2 () {// A Method2}} La classe publique B étend un {public void Method1 () {// B Method1}} La classe publique C étend A {public void Method1 () {// C Method1}}La classe A abstraite a deux sous-classes B et C. Étant donné que A contient la mise en œuvre de la méthode de méthode2, la méthode Method2 n'a pas besoin d'être réécrite dans les sous-classes B et C. Nous disons que A fournit des fonctions publiques pour les sous-classes, ou une contrainte . Comportement des sous-classes. Method2 est un exemple du code réutilisable. A ne définit pas la mise en œuvre de la méthode1, c'est-à-dire que, B et C peuvent implémenter la méthode Méthode1 en fonction de leurs propres caractéristiques, qui reflète les caractéristiques du couplage lâche.
Changez-le en interface et voyez:
Interface publique a {public void Method1 (); public void method2 ();} public class B implémente a {public void method1 () {// b method1} public v oid method2 () {// b method2}} public class C implémente un {public void method1 () {// c method1} public void method2 () {// c method2}}L'interface A ne peut pas fournir de fonctions publiques pour implémenter les classes B et C, ce qui signifie que A ne peut pas limiter le comportement de B et C. B et C peuvent exercer librement leurs caractéristiques et leurs méthodes de méthode et de méthode réalistes, et l'interface A n'a pas de capacité de contrôle.
2) Une classe ne peut hériter qu'une classe de parent directe (peut-être une classe abstraite), mais une classe peut implémenter plusieurs interfaces, ce qui est l'avantage de l'interface.
Interface A {public void method2 ();} interface b {public void method1 ();} class C implémente a, b {public void method1 () {// c method1} public ic void method2 () {// c method2} } // c peut être utilisé de manière si flexible, et C a la possibilité de développer et d'implémenter d'autres interfaces a a = new C (); La classe B étend un {public abstract void method2 ();} class C étend b {public void method1 () {// c méthody} public void method2 () {// c méthody}}}Pour la classe C, il n'y aura aucune chance d'hériter d'autres classes de parents.
Pour résumer, les interfaces et les classes abstraites ont leurs propres avantages et inconvénients.
Le modèle comportemental doit toujours être défini par des interfaces plutôt que dans les classes abstraites, donc les interfaces sont généralement préférées et les classes abstraites doivent être utilisées aussi peu que possible.
Lors du choix d'une classe abstraite, c'est généralement la situation suivante: vous devez définir le comportement de la sous-classe et fournir des fonctions générales pour la sous-classe.