Cet article décrit l'utilisation des interfaces et des classes abstraites en Java. Partagez-le pour votre référence, comme suit:
Dans le concept orienté objet, nous savons que tous les objets sont représentés par les classes, mais toutes les classes ne sont pas utilisées pour décrire des objets. Si une classe ne contient pas suffisamment d'informations pour décrire un objet concret, une telle classe est une classe abstraite.
Les classes abstraites sont souvent utilisées pour représenter les concepts abstraits que nous obtenons dans l'analyse et la conception du domaine du problème. Ce sont des abstractions d'une série de concepts concrets qui semblent différents mais qui sont essentiellement les mêmes. Nous ne pouvons pas les instancier (ne pouvons pas trouver une chose concrète), donc nous les appelons des abstractions.
Par exemple: lorsque nous voulons décrire le "fruit", c'est une abstraction. Il a certaines caractéristiques communes telles que la masse et le volume (les fruits ont une masse), mais il manque de caractéristiques (les pommes et les oranges sont des fruits, et ils ont leurs propres caractéristiques). Nous ne pouvons pas trouver la seule chose qui peut représenter les fruits (car les pommes et les oranges ne peuvent pas représenter les fruits). Les classes abstraites peuvent être utilisées pour le décrire, de sorte que les classes abstraites ne peuvent pas être instanciées. Lorsque nous utilisons une certaine classe pour décrire les "pommes", cette classe peut hériter de la classe abstraite qui décrit "fruit". Nous savons tous que les "pommes" sont une sorte de "fruit".
Dans le champ orienté objet, les classes abstraites sont principalement utilisées pour la cachette de type. Nous pouvons construire une description abstraite fixe d'un ensemble de comportements, mais cet ensemble de comportements peut avoir des méthodes de mise en œuvre concrètes possibles. Cette description abstraite est une classe abstraite, et cet ensemble de toute implémentation concrète possible se manifeste comme toutes les classes dérivées de cette classe abstraite.
Toutes les méthodes abstraites dans les interfaces et les classes abstraites ne peuvent pas être implémentées dans des implémentations concrètes, mais doivent implémenter toutes les méthodes abstraites dans leurs sous-classes (doivent avoir un corps de fonction, même s'il est vide dans {}). Les concepteurs de Java peuvent considérer la flexibilité des méthodes abstraites, et chaque sous-classe peut mettre en œuvre des méthodes abstraites en fonction de leurs propres besoins.
La définition de la classe abstraite est la suivante:
classe abstraite de la classe abstraite AbstractClass // Il existe au moins une méthode abstraite dedans {public int t; // Membre des données ordinaires Public Abstract Void Method1 (); // Méthode abstraite, les sous-classes de la classe abstraite doivent implémenter des méthodes abstraites dans la classe abstraite dans la classe publique abstraite void method2 (); Public Void Method3 (); // Méthode non abstracte Public int méthode4 (); Public int méthode4 () {... // La classe abstraite peut se voir attribuer le comportement par défaut des méthodes de méthodes non abstraites, c'est-à-dire la mise en œuvre concrète de la méthode} la méthode publique void3 () {... // la classe abstraite peut être attribuée le comportement par défaut des méthodes non abstraites, c'est-à-dire la mise en œuvre concrete de la méthode}}}La définition d'une interface est la suivante:
Interface d'interface publique Interface {statique final int i; // Il ne peut pas y avoir de membres de données ordinaires dans l'interface, seulement des membres de données statiques qui ne peuvent pas être modifiés. Les moyens statiques globaux, les moyens finaux ne peuvent pas être modifiés. Il peut être modifié sans modification finale statique, et il sera implicitement déclaré comme méthode du VOID public statique et final1 (); // Les méthodes de l'interface doivent être des méthodes abstraites, de sorte que la méthode publique 2 () n'a pas besoin de modification abstraite; // Le comportement par défaut des méthodes ne peut pas être affecté à l'interface, c'est-à-dire qu'il ne peut pas y avoir de mise en œuvre spécifique de la méthode}En bref, les classes abstraites sont des classes incomplètes, et les interfaces ne sont que des collections de déclarations de méthodes abstraites et de données statiques qui ne peuvent pas être modifiées, ce qui ne peut être instanciée.
Dans un sens, une interface est une forme spéciale de classe abstraite. Dans la langue Java, les classes abstraites représentent une relation d'héritage. Une classe ne peut hériter qu'une seule classe abstraite, tandis qu'une classe peut implémenter plusieurs interfaces. Dans de nombreux cas, les interfaces peuvent en effet remplacer les classes abstraites, si vous n'avez pas besoin d'exprimer délibérément l'héritage sur les attributs.
Pour comprendre davantage, aux fins de Java, introduisant des cours et des interfaces abstraits, les réponses que j'ai obtenues des experts sont les suivantes:
1. Du point de vue de la hiérarchie des classes, les classes abstraites sont en haut du niveau, mais dans la conception réelle, les classes abstraites devraient généralement apparaître plus tard. Pourquoi? En fait, l'acquisition de classes abstraites est un peu comme extraire des facteurs communs en mathématiques: AX + BX, X est une classe abstraite. Si vous n'avez pas la formule précédente, comment savez-vous si X est un facteur commun? À cet égard, il est également conforme au processus des gens de comprendre le monde, d'abord concret puis abstrait. Par conséquent, si vous obtenez beaucoup de concepts spécifiques et trouvez des points communs dans le processus de conception, il devrait être vrai que cette collection de points communs est une classe abstraite.
2. En surface, l'interface est très similaire aux classes abstraites, mais son utilisation est complètement différente. Sa fonction de base est de rassembler des classes (concepts) non pertinentes pour former une nouvelle "nouvelle classe" opérable centralement. Un exemple typique que je donne aux étudiants est le "conducteur". Qui peut être un conducteur? Tout le monde peut le faire, tant que vous obtenez votre permis de conduire. Je me fiche donc de savoir si vous êtes étudiant, travailleur des cols blancs, collier bleu ou patron, tant que vous avez un permis de conduire, vous êtes un chauffeur.
Interface Driver Implience {License GetLICECT (); } class StudentDriver étend que l'élève implémente la concession de la conduite {} classe WhTIEColLaRemployEeedriver étend WhTIEColLaRemployee implémente le pilote {} classe BlueColLaRemployEeedriver étend BlueCollalemployee implémente la conduite {} Classe Bossdriver étend le boss {}Lorsque je définis la classe "voiture", je peux spécifier le "pilote".
classe Car {setDriver (pilote de conducteur);}À l'heure actuelle, l'objet de la voiture ne se souciait pas de ce que le chauffeur avait fait. Leur seul point commun était qu'ils avaient obtenu un permis de conduire (tous deux mis en œuvre l'interface de conduite). Cela devrait être la partie la plus puissante de l'interface et est incomparable pour les classes abstraites.
Résumer:
Les classes abstraites extraient des facteurs communs des classes concrètes, tandis que les interfaces doivent "hacher" certaines classes non liées en un groupe commun. Habituellement, nous développons une bonne habitude d'utiliser plusieurs interfaces. Après tout, Java est un héritage unique, contrairement à C ++, mais il doit être utilisé lors de l'utilisation de classes abstraites (quelque peu similaires à Goto), haha.
J'espère que cet article sera utile à la programmation Java de tous.