[JAVA] Interface / classe abstraite / remplacement

Je suis débutant, mais je l'ai écrit pour une étude personnelle

Interface

Une interface ne fournit pas de traitement spécifique comme une classe, mais il est explicitement indiqué de définir des ** règles **, et le traitement réel est défini par la classe qui implémente l'interface. Par conséquent, dans le domaine d'une entreprise où plusieurs personnes créent un programme, en définissant la méthode que vous souhaitez que la classe enfant implémente dans la classe abstraite parente en tant que méthode abstraite, même la classe enfant créée par d'autres personnes peut être utilisée. Il y a un avantage que la méthode est toujours mise en œuvre

** * Méthode abstraite ** ・ ・ ・ Une méthode qui définit uniquement le nom / type / argument

① Seul le "moule" est sorti de la classe

** * "Type" ** ... lui-même ** "Comment décider comment gérer" **, et lors de la déclaration d'une variable, le type est spécifié afin de décider comment gérer la variable.

-Il faut noter que ** le type de l'objet à manipuler et le "type de la chose à manipuler" spécifié par le type sont des concepts différents **. Par exemple, le type et la méthode de gestion sont différents afin que la valeur numérique 1 puisse être traitée comme un type int ou un type double.

(2) Ceux qui spécifient la "manipulation" d'autres classes

-L'interface est ** automatiquement rendue publique ** par le compilateur car toutes les méthodes spécifiées sont interprétées comme publiques afin qu'elles puissent être gérées par d'autres classes. -Les méthodes définies dans l'interface ne peuvent pas être qualifiées avec protected ou private (à partir de Java8, le contenu peut également être défini en ajoutant le modificateur par défaut). -Comme vous pouvez le voir en utilisant des implémentations lorsqu'une classe hérite d'une interface, cela ne fonctionne que s'il existe une ** "classe qui implémente les règles" **.

③ L'interface ne peut pas avoir d'implémentation

** Puisque l'interface spécifie uniquement comment gérer **, ** ne peut pas avoir d'implémentation , alors créez une instance et ** décrivez quelque chose qui fonctionne dynamiquement (chose qui change dynamiquement) Ne peux pas Cependant, il peut être décrit si l'une des deux conditions suivantes est remplie.

-Utiliser ** final ** et la valeur ne doit pas être modifiée dynamiquement (constante) -Impossible de créer une instance en utilisant ** static **

④ Héritage d'interface

-L'héritage peut définir une nouvelle classe qui étend la fonction de classe comme vous pouvez le voir en utilisant extend, mais vous pouvez également définir (hériter) une nouvelle interface qui étend une certaine interface avec extend.

Classe abstraite

① Possède à la fois des propriétés d'interface et de classe

· ** Peut avoir à la fois une méthode concrète ** avec une implémentation et une méthode abstraite ** sans implémentation ** -La méthode concrète définie dans la classe abstraite est héritée par la sous-classe qui hérite de la classe abstraite.

② Ne peut pas être instancié

-Les classes abstraites avec des caractéristiques d'interface (méthodes abstraites) ne peuvent pas être instanciées comme des interfaces ** -Comme vous pouvez le voir du fait qu'il ne peut pas être instancié, il est supposé qu'il sera hérité et utilisé **. -La méthode abstraite définie dans la classe abstraite doit être implémentée par une classe concrète qui en hérite ** -Une classe abstraite qui hérite d'une classe abstraite ne doit pas nécessairement être implémentée comme une classe concrète, mais peut être implémentée en étendant la classe abstraite d'origine, en ajoutant une nouvelle méthode abstraite ou en remplaçant une méthode abstraite existante. ça peut.

③ Définition du champ

-Les instances de sous-classe qui héritent de la classe abstraite incluent des instances de la classe abstraite. En d'autres termes, l'instance de sous-classe qui hérite de la classe abstraite contient l'instance de la classe abstraite, et l'interface qui fournit uniquement le type ne peut avoir que des champs constants, mais la classe abstraite peut définir des champs dont les valeurs peuvent être modifiées dynamiquement.

passer outre

Le remplacement a trois règles

① Pour redéfinir la méthode, les ** signatures des méthodes doivent être les mêmes ** ** Signature **: une combinaison de nom de méthode, de type de liste d'arguments, de nombre et d'ordre ② ** La valeur de retour doit être la même ou une sous-classe ** ③ ** Les modificateurs d'accès peuvent être plus lâches que la définition d'origine, mais ne peuvent pas être stricts ** -L'exemple suivant peut être remplacé car le type Integer est une sous-classe de type Number.

Sample.java


public Number method{
//any code
}

Sample.java


public Integer method{
//any code
}

Remplacer ajouté (redéfini)

-Comme le remplacement n'est pas un écrasement mais un ajout (redéfinition), cela signifie qu'il existe plusieurs méthodes portant le même nom dans l'instance de sous-classe. Dans ce cas, la méthode remplacée est utilisée

Recommended Posts

Interface / classe abstraite / remplacement
Différence entre interface et classe abstraite
java (classe abstraite)
interface et résumé
[java] Classe abstraite
Utilisation correcte de l'interface et de la classe abstraite
Contenu d'apprentissage de base Java 6 (héritage / classe abstraite / interface)
À propos de la classe abstraite de Java
Utilisation correcte de la classe abstraite et de l'interface en Java
Résumé d'héritage avancé, interface -java
Mémo d'apprentissage Java (classe abstraite)
interface