[Java] J'ai réfléchi aux mérites et aux utilisations de "interface"

introduction

Je ne suis qu'un débutant en Java qui vient d'apprendre à hériter des classes Si vous avez une mauvaise opinion, il serait utile que vous puissiez nous le dire d'une manière facile à comprendre. Cette fois, j'introduirai la compréhension de l'interface et quand il sera commode de l'utiliser avec des exemples concrets.

Qu'est-ce que l'interface

l'interface est utilisée pour implémenter et utiliser la méthode plus tard sans écrire spécifiquement le contenu du traitement au début. Efficace lorsque vous souhaitez modifier le processus car la méthode est implémentée ultérieurement.

Article de référence

Mon point de vue quand je ne savais que ce qui précède ---> ** L'utilisez-vous lorsque vous ne pouvez pas voir concrètement la vision précédente? ** ** ---> ** Si vous écrivez le code vous-même, devez-vous l'utiliser? ** ** ---> ** Est-ce utile quand vous voulez déclarer les variables à utiliser plus tard de toute façon et les utiliser ensemble plus tard? ** **

règle

Seules la ** constante ** et la ** méthode ** peuvent être définies De plus, les variables membres de l'interface reçoivent automatiquement "public static final", elles deviennent donc des ** constantes **.

Définition d'interface (exemple)

interface Nom de l'interface{
int constante 1= 1;
int constante 2= 2;
Constante de chaîne 3= "hello";

void Nom de la fonction pour laquelle le traitement sera écrit ultérieurement();
}

Ce que tu peux faire

Les constantes définies dans l'interface peuvent être réutilisées avec les noms de fonctions définis! ✌️

Exemple

Main.java


interface Calc {
  int num1 = 1;
  int num2 = 2;
  String str1 = "multiplication";
  String str2 = "division";

  void calculation();
}

class Multi implements Calc {
  public void calculation() {
    System.out.println(str1);
    System.out.println(num1 * num2);
  }
}

class Divi implements Calc {
  public void calculation(){
    System.out.println(str2);
    System.out.println(num1 / num2);
  }
}

public class Main {
  public static void main(String[] args){
    Multi mlt = new Multi();
    mlt.calculation();

    Divi div  = new Divi();
    div.calculation();
  }
}

Courir


$ java Main

multiplication
2
division
0

Les constantes et fonctions définies par le nom de l'interface *** Calc *** Vous pouvez voir qu'il est disponible dans la classe de multiplication *** Multi *** et la classe de division *** Divi ***

N'est-ce pas un héritage de classe?

Je pense que certaines personnes ont pensé

Oui, ** la même chose si vous héritez de ce que vous avez défini dans la classe parent à la classe enfant! ** **

Ce n’est pas une erreur.

Alors, quels sont les avantages de ** interface **?

C'est ** vous pouvez hériter de plusieurs interfaces en même temps **

En ** héritage de classe **, lors de l'héritage d'une classe parent à une classe enfant, La classe enfant héritière ne doit pouvoir spécifier ** qu'une classe parent **.

** "Peut gérer (hériter) plusieurs interfaces créées précédemment" **

C'est l'avantage de ** l'interface ** sur ** l'héritage de classe **.

Le meilleur moment pour utiliser "interface" au lieu de l'héritage de classe

J'ai pensé que la fonction d'interface serait utile dans une telle situation.

Tout d'abord, jetez un œil au code ci-dessous. Entrez *** nombre d'élèves, nombre de salles de classe, nombre de notes *** de ma propre école, Résultats ** population par salle de classe et population par classe ** dans chaque école

Main.java



//école primaire
  interface Primary_school {
  int p_people  = 500;
  int p_classes = 18;
  int p_year    = 6;
  String p_name = "Mine";
  void pcal();
}

//Lycée
interface Junior_high_school {
  int j_people  = 750;
  int j_classes = 27;
  int j_year    = 3;
  String j_name = "Yoto";
  void jcal();
}

//Université
interface University {
  int u_people  = 10000;
  int u_classes = 50;
  int u_year    = 4;
  String u_name = "Tsukuba";
  void ucal();
}

//Densité de population de classe
class PopulationDensity implements Primary_school, Junior_high_school, University{//, Junior_high_school, University {
  public void pcal() {
    System.out.print(p_name+"--->");
    System.out.println(p_people / p_classes);
  }
  public void jcal(){
    System.out.print(j_name+"--->");
    System.out.println(j_people / j_classes);
  }
  public void ucal(){
    System.out.print(u_name+"--->");
    System.out.println(u_people / u_classes);
  }
}

//Densité de population de grade
class PopulationPerYear implements Primary_school, Junior_high_school, University{
  public void pcal(){
    System.out.print(p_name+"--->");
    System.out.println(p_people / p_year);
  }
  public void jcal(){
    System.out.print(j_name+"--->");
    System.out.println(j_people / j_year);
  }
  public void ucal(){
    System.out.print(u_name+"--->");
    System.out.println(u_people / u_year);
  }
}

public class Main {
  public static void main(String[] args){
    String pink   = "\u001b[00;35m";
    String cyan   = "\u001b[00;36m";
    String end    = "\u001b[00m";


    PopulationDensity PD = new PopulationDensity();
    System.out.println(pink+"【PopulationPerClass】: "+end);
    PD.pcal();
    PD.jcal();
    PD.ucal();

    PopulationPerYear PPY  = new PopulationPerYear();
    System.out.println(cyan+"【PopulationPerYear】: "+end);
    PPY.pcal();
    PPY.jcal();
    PPY.ucal();
    //div.calculation();
  }
}

Résultat d'exécution Screen Shot 2019-04-25 at 15.45.11.png

Vous pouvez voir que chaque classe peut hériter de plusieurs interfaces définies.

Je pense que c'est une fonction très utile plus tard lorsque plusieurs personnes sont chargées de développer différentes données d'entrée.

Avantages et inconvénients de l'héritage de classe et de l'interface

Héritage de classe interface
mérite Peut gérer les variables et les fonctions définies dans la classe parent Peut gérer plusieurs interfaces en même temps
Démérite Une seule classe peut être héritée par une classe enfant Ne peut gérer que les constantes

Pour le moment, ça ressemble à ça aujourd'hui

Mis à jour: 2019/04/25

Recommended Posts

[Java] J'ai réfléchi aux mérites et aux utilisations de "interface"
J'ai comparé les caractéristiques de Java et .NET
Je n'ai pas vraiment compris le comportement de Java Scanner et .nextLine ()
À propos de Biocontainers fastqc et Java
J'ai essayé de résumer les bases de kotlin et java
[Java débutant] À propos de l'abstraction et de l'interface
Le piège que l'implémentation par défaut de l'interface Java 8 apporte
J'ai essayé de résumer les méthodes de Java String et StringBuilder
[jour: 5] J'ai résumé les bases de Java
[Java / Swift] Comparaison de l'interface Java et du protocole Swift
À propos de l'interface Java
Quand j'étais inquiet des méthodes statiques dans l'interface java, je suis arrivé à l'ordre d'interprétation des noms
Interface [Java]
À propos de la classification et du concept de Immutable / Mutable / Const / Variable de Java et Kotlin.
J'ai essayé de traduire la grammaire de R et Java [Mis à jour de temps en temps]
Pensez à la combinaison de Servlet et Ajax
A propos de l'ordre de description des propriétés système Java
À propos de l'idée des classes anonymes en Java
[Java] La partie déroutante de String et StringBuilder
À propos de next () et nextLine () de la classe Scanner
Essayez Progate Free Edition [Java I]
J'ai reçu les données du voyage (application agenda) en Java et j'ai essayé de les visualiser # 001
Je veux obtenir récursivement la superclasse et l'interface d'une certaine classe
À propos de l'interface fonctionnelle Java
java (mérites du polymorphisme)
[Rails] J'ai étudié la différence entre les ressources et les ressources
Veuillez noter la division (division) de java kotlin Int et Int
La comparaison d'énumération est ==, et equals est bonne [Java]
[Grails] À propos de la zone de paramétrage et des éléments de paramétrage de application.yml
Parler des mérites des variables de liaison de base de données ((1) Introduction)
Organiser l'état actuel de Java et envisager l'avenir
Langage Java du point de vue de Kotlin et C #
[JAVA] Quelle est la différence entre interface et abstract? ?? ??
[Java] À propos de Objects.equals () et examen de la comparaison de chaînes (== et égal à)
[Note technique] À propos des avantages et des inconvénients de Ruby
Utilisation correcte de la classe abstraite et de l'interface en Java
[Java] [javaSliver] L'interface et les classes abstraites sont compliquées, je vais donc les résumer.
À propos de la gestion de Null
[Note] Sortie Java de la somme des éléments pairs et impairs
Ce que j'ai recherché sur Java 8
À propos des instances Java
Ce que j'ai recherché sur Java 6
[Ruby] Questions et vérification du nombre d'arguments de méthode
À propos de la description de Docker-compose.yml
Ce que j'ai recherché sur Java 9
[Java] Définit la structure de la classe de collection (à propos de HashSet et TreeSet)
Commande pour vérifier le nombre et l'état des threads Java
Que dois-je faire après janvier 2019 concernant le problème du paiement Java et le problème de la fin du support Java 8?
Les débutants en Java ont brièvement résumé le comportement de Array et ArrayList
J'ai essayé JAX-RS et pris note de la procédure
Avez-vous déjà pensé à la définition de «mauvaise conception»?
À peu près la même et la même valeur
Ce que j'ai recherché sur Java 7
[Swift] J'ai pensé à comparer
Pensez aux différences entre les fonctions et les méthodes (en Java)