[JAVA] Utilisation correcte de l'interface et de la classe abstraite

Comment utiliser correctement l'interface et la classe abstraite?

La prochaine chose qu'un débutant se demande après avoir compris à quoi ressemblent une interface et une classe abstraite __ Comment chacun doit-il être utilisé correctement? __ Je pense que c'est le cas.

Interfaces pour les utilisateurs, classes abstraites pour les implémenteurs

Bref, c'est tout.

En particulier

Implémentez l'interface pour les classes que vous souhaitez appeler en utilisant le polymorphisme.

L'utilisateur ne doit pas déclarer de variables de type classe abstraite. Déclarons des variables avec le type d'interface.

AbstractFooBar = new FooBar(); // NG
IFooBar = new FooBar(); // OK

Vous ne devez pas non plus définir de méthodes qui utilisent des classes abstraites comme types d'arguments formels. Spécifions le type d'interface.

void fooMethod(AbstractFooBar fooBar); // NG
void fooMethod(IFooBar fooBar); // OK

Supplément Que faire si vous souhaitez appliquer le polymorphisme dans une classe abstraite?

Et si vous souhaitez utiliser le polymorphisme pour les classes enfants d'une classe abstraite? Parce que la question semble se poser. Dans ce cas, cela ressemble à ce qui suit.

抽象クラス-インタフェース.png

De cette façon, l'utilisateur doit toujours appeler via l'interface IFooBar, et Pour ceux qui implémentent l'interface IFooBar, Vous pouvez choisir d'étendre AbstractFooBar ou d'implémenter IFooBar directement, Tout le monde sera heureux.

Recommended Posts

Utilisation correcte de l'interface et de la classe abstraite
Utilisation correcte de la classe abstraite et de l'interface en Java
abstract (classe abstraite) et interface (interface)
Différence entre interface et classe abstraite
Utilisez redirect_to et effectuez un rendu correctement
Utilisation correcte de Mockito et PowerMock
interface et résumé
Utilisation de la classe Date
Interface / classe abstraite / remplacement
Critères pour utiliser correctement render et redirect_to
Exemple d'utilisation d'une classe abstraite
Résumé des "différences d'interface abstraites"
[JAVA] Différence entre abstrait et interface
[Java / Swift] Comparaison de l'interface Java et du protocole Swift
[Java] Contenu de l'interface de collection et de l'interface de liste
(Déterminez en 1 minute) Comment utiliser vide?, Vide? Et présent?
Contenu d'apprentissage de base Java 6 (héritage / classe abstraite / interface)
Classe et modèle
[Java] Comment utiliser la classe FileReader et la classe BufferedReader
java (classe abstraite)
À propos de next () et nextLine () de la classe Scanner
[java] Classe abstraite
Utilisez-vous l'instruction for après tout? Utilisez-vous l'instruction while? Utilisation correcte des instructions for et while
Héritage et interface.
Je veux obtenir récursivement la superclasse et l'interface d'une certaine classe
[Java] Comment utiliser la classe Calendar et la classe Date
Utilisation de polices japonaises et de caractères étrangers dans Jasper Report
Jusqu'à l'utilisation de Spring Data et JPA Part 2
[JAVA] Quelle est la différence entre interface et abstract? ?? ??
Utiliser des variables pour les noms de classe et les noms d'identifiant dans haml
[Ruby] Imbrication de classes, héritage et principes de base de soi
[Java] Gestion des chaînes de caractères (classe String et classe StringBuilder)
Comment utiliser et appliquer la classe JFrame / Canvas de Java
Traitement de la date et de l'heure en Ruby. Utilisez correctement la date et l'heure.
Classe et instant part2
À propos de la classe abstraite de Java
[Java] Définit la structure de la classe de collection (à propos de HashSet et TreeSet)
Implémentez l'interface Java dans la classe JRuby et appelez-la depuis Java
[Java] J'ai réfléchi aux mérites et aux utilisations de "interface"