[Java] Ich habe über die Vorzüge und Verwendungen von "Schnittstelle" nachgedacht.

Einführung

Ich bin nur ein Java-Anfänger, der erst kürzlich gelernt hat, wie man Klassen erbt Wenn Sie eine falsche Meinung haben, wäre es hilfreich, wenn Sie uns dies auf leicht verständliche Weise mitteilen könnten. Dieses Mal werde ich das Verständnis der Benutzeroberfläche vorstellen und erläutern, wann es zweckmäßig ist, sie anhand konkreter Beispiele zu verwenden.

Was ist Schnittstelle

interface wird verwendet, um die Methode später zu implementieren und zu verwenden, ohne den Verarbeitungsinhalt zu Beginn speziell zu schreiben. Wirksam, wenn Sie den Prozess ändern möchten, da die Methode später implementiert wird.

Referenzartikel

Meine Ansicht, als ich nur das oben Genannte wusste ---> ** Verwenden Sie es, wenn Sie die vorherige Vision nicht konkret sehen können? ** **. ---> ** Wenn Sie den Code selbst schreiben, müssen Sie ihn verwenden? ** **. ---> ** Ist es nützlich, wenn Sie die Variablen deklarieren möchten, die später verwendet werden sollen, und sie später zusammen verwenden möchten? ** **.

Regel

Es können nur ** Konstante ** und ** Methode ** definiert werden Außerdem erhalten die Mitgliedsvariablen der Schnittstelle automatisch "public static final", sodass sie zu ** Konstanten ** werden.

Schnittstellendefinition (Beispiel)

Schnittstelle Name der Schnittstelle{
int Konstante 1= 1;
int Konstante 2= 2;
String-Konstante 3= "hello";

void Funktionsname, für den die Verarbeitung später geschrieben wird();
}

Was du tun kannst

Die in der Schnittstelle definierten Konstanten können mit den definierten Funktionsnamen wiederverwendet werden! ✌️

Beispiel

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();
  }
}

Lauf


$ java Main

multiplication
2
division
0

Die durch den Schnittstellennamen *** Calc *** definierten Konstanten und Funktionen Sie können sehen, dass es in der Multiplikationsklasse *** Multi *** und der Divisionsklasse *** Divi *** verfügbar ist.

Ist es nicht eine Klassenvererbung?

Ich denke, einige Leute haben vielleicht gedacht

Ja, ** dasselbe, wenn Sie das, was Sie in der übergeordneten Klasse definiert haben, an die untergeordnete Klasse erben! ** **.

Das ist kein Fehler.

Was sind die Vorteile von ** interface **?

Das heißt ** Sie können mehrere Schnittstellen gleichzeitig erben **

Wenn in ** Klassenvererbung ** eine übergeordnete Klasse an eine untergeordnete Klasse geerbt wird, Die erbende untergeordnete Klasse sollte nur ** eine übergeordnete Klasse ** angeben können.

** "Kann mehrere zuvor erstellte Schnittstellen verarbeiten (erben)" **

Das ist der Vorteil der ** Schnittstelle ** gegenüber der ** Klassenvererbung **.

Der beste Moment, um "Schnittstelle" anstelle von Klassenvererbung zu verwenden

Ich dachte, dass die Funktion als Schnittstelle in einer solchen Situation nützlich wäre.

Schauen Sie sich zunächst den folgenden Code an. Geben Sie *** Anzahl der Schüler, Anzahl der Klassenzimmer, Anzahl der Noten *** meiner eigenen Schule ein, Outputs ** Bevölkerung pro Klassenzimmer und Bevölkerung pro Klasse ** an jeder Schule

Main.java



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

//Junior High School
interface Junior_high_school {
  int j_people  = 750;
  int j_classes = 27;
  int j_year    = 3;
  String j_name = "Yoto";
  void jcal();
}

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

//Klassenbevölkerungsdichte
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);
  }
}

//Bevölkerungsdichte
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();
  }
}

Ausführungsergebnis Screen Shot 2019-04-25 at 15.45.11.png

Sie können sehen, dass jede Klasse mehrere definierte Schnittstellen erben kann.

Ich denke, dies ist später eine sehr nützliche Funktion, wenn mehrere Personen für die Entwicklung unterschiedlicher Eingabedaten verantwortlich sind.

Vor- und Nachteile der Klassenvererbung und -schnittstelle

Klassenvererbung Schnittstelle
verdienen Kann mit Variablen und Funktionen umgehen, die in der übergeordneten Klasse definiert sind Kann mehrere Schnittstellen gleichzeitig verarbeiten
Fehler Nur eine Klasse kann von einer untergeordneten Klasse geerbt werden Kann nur mit Konstanten umgehen

Derzeit sieht es heute so aus

Aktualisiert: 25.04.2019

Recommended Posts

[Java] Ich habe über die Vorzüge und Verwendungen von "Schnittstelle" nachgedacht.
Ich habe die Eigenschaften von Java und .NET verglichen
Ich habe das Verhalten von Java Scanner und .nextLine () nicht wirklich verstanden.
Über Biocontainer fastqc und Java
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
[Java-Anfänger] Über Abstraktion und Schnittstelle
Die Falle, die die Standardimplementierung der Java 8-Schnittstelle mit sich bringt
Ich habe versucht, die Methoden von Java String und StringBuilder zusammenzufassen
[Tag: 5] Ich habe die Grundlagen von Java zusammengefasst
[Java / Swift] Vergleich von Java-Schnittstelle und Swift-Protokoll
Über die Java-Schnittstelle
Als ich mir Sorgen über statische Methoden in der Java-Oberfläche machte, kam ich zur Reihenfolge der Namensinterpretation
[Java] -Schnittstelle
Über die Klassifizierung und das Konzept von Immutable / Mutable / Const / Variable von Java und Kotlin.
Ich habe versucht, die Grammatik von R und Java zu übersetzen [Von Zeit zu Zeit aktualisiert]
Denken Sie an die Kombination von Servlet und Ajax
Informationen zur Beschreibungsreihenfolge der Java-Systemeigenschaften
Über die Idee anonymer Klassen in Java
[Java] Der verwirrende Teil von String und StringBuilder
Informationen zu next () und nextLine () der Scannerklasse
Probieren Sie Progate Free Edition [Java I]
Ich habe die Daten der Reise (Tagebuchanwendung) in Java erhalten und versucht, sie # 001 zu visualisieren
Ich möchte rekursiv die Oberklasse und die Schnittstelle einer bestimmten Klasse erhalten
Informationen zur Java-Funktionsschnittstelle
Java (Verdienste des Polymorphismus)
[Rails] Ich habe den Unterschied zwischen Ressourcen und Ressourcen untersucht
Bitte beachten Sie die Aufteilung (Aufteilung) von Java Kotlin Int und Int
Der Vergleich von enum ist == und gleich ist gut [Java]
[Grails] Über den Einstellungsbereich und die Einstellungselemente von application.yml
Über die Vorzüge von Datenbankbindungsvariablen sprechen ((1) Einführung)
Den aktuellen Status von Java organisieren und die Zukunft betrachten
Java-Sprache aus der Sicht von Kotlin und C #
[JAVA] Was ist der Unterschied zwischen Schnittstelle und Zusammenfassung? ?? ??
[Java] Über Objects.equals () und Überprüfung des String-Vergleichs (== und gleich)
[Technisches Memo] Über die Vor- und Nachteile von Ruby
Verwendung von Abstract Class und Interface in Java richtig
[Java] [javaSliver] Die Schnittstelle und die abstrakten Klassen sind kompliziert, daher werde ich sie zusammenfassen.
Über den Umgang mit Null
[Hinweis] Java Ausgabe der Summe von ungeraden und geraden Elementen
Was ich über Java 8 recherchiert habe
Über Java-Instanzen
Was ich über Java 6 recherchiert habe
[Ruby] Fragen und Überprüfung der Anzahl der Methodenargumente
Informationen zur Beschreibung von Docker-compose.yml
Was ich über Java 9 recherchiert habe
[Java] Struktur der Auflistungsklasse festlegen (zu HashSet und TreeSet)
Befehl zum Überprüfen der Anzahl und des Status von Java-Threads
Was soll ich nach Januar 2019 in Bezug auf die Ausgabe der Java-Zahlung und die Ausgabe des Java 8-Endes des Supports tun?
Java-Anfänger fassten das Verhalten von Array und ArrayList kurz zusammen
Ich habe JAX-RS ausprobiert und mir das Verfahren notiert
Haben Sie jemals über die Definition von "schlechtem Design" nachgedacht?
Ungefähr der gleiche und der gleiche Wert
Was ich über Java 7 recherchiert habe
[Swift] Ich dachte über Vergleiche nach
Denken Sie über die Unterschiede zwischen Funktionen und Methoden nach (in Java)