Schnittstelle in Java ist eines der Kernkonzepte. Die Java-Schnittstelle ist ein wesentlicher Bestandteil der Java-Programmiersprache und wird nicht nur in der JDK, sondern auch in Java-Designpattern viel verwendet. Die meisten Frameworks verwenden Java-Schnittstellen stark.
Schnittstelle in Java
Die Schnittstelle in Java ermöglicht es, Abstraktion zu erreichen. Die Java-Schnittstelle wird auch verwendet, um den Vertrag für die zu implementierenden Unterklassen zu definieren. Zum Beispiel, nehmen wir an, wir möchten eine Zeichnung erstellen, die aus mehreren Formen besteht. Hier können wir eine Schnittstelle
Shape
erstellen und alle Methoden definieren, die verschiedene Arten von Shape-Objekten implementieren werden. Zur Vereinfachung können wir nur zwei Methoden beibehalten – draw()
, um die Form zu zeichnen, und getArea()
, die den Flächeninhalt der Form zurückgibt.
Java-Schnittstellenbeispiel
Gemäß den oben genannten Anforderungen wird unsere Shape-Schnittstelle wie folgt aussehen. Shape.java
package com.journaldev.design;
public interface Shape {
//implizit public, static und final
public String LABLE="Shape";
//Schnittstellenmethoden sind implizit abstrakt und öffentlich
void draw();
double getArea();
}
Wichtige Punkte zur Schnittstelle in Java
-
Schnittstelle
ist der Code, der verwendet wird, um eine Schnittstelle in Java zu erstellen. -
Wir können keine Instanz einer Schnittstelle in Java erstellen.
-
Die Schnittstelle bietet absolute Abstraktion. Im letzten Beitrag haben wir über abstrakte Klassen in Java gelernt, um Abstraktion bereitzustellen, aber abstrakte Klassen können Methodenimplementierungen haben, Schnittstellen jedoch nicht.
-
Schnittstellen können keine Konstruktoren haben, da wir sie nicht instanziieren können, und Schnittstellen können keine Methode mit Körper haben.
-
Nach Voreinstellung ist jedes Attribut einer Schnittstelle public, static und final, daher müssen wir keine Zugriffsmodifikatoren für die Attribute angeben, aber wenn wir es tun, beschwert sich der Compiler auch nicht darüber.
-
Nach Voreinstellung sind Schnittstellenmethoden implizit abstract und public, das macht total Sinn, weil die Methode keinen Körper hat und Unterklassen die Methodenimplementierung bereitstellen können.
-
Eine Schnittstelle kann keine Klasse erweitern, aber sie kann eine andere Schnittstelle erweitern.
public interface Shape extends Cloneable{}
ist ein Beispiel für eine Schnittstelle, die eine andere Schnittstelle erweitert. Tatsächlich bietet Java Mehrfachvererbung in Schnittstellen, das bedeutet, dass eine Schnittstelle mehrere Schnittstellen erweitern kann. -
implements
Schlüsselwort wird von Klassen verwendet, um ein Interface zu implementieren. -
Eine Klasse, die ein Interface implementiert, muss eine Implementierung für alle ihre Methoden bereitstellen, es sei denn, es handelt sich um eine abstrakte Klasse. Zum Beispiel können wir das obige Interface in einer abstrakten Klasse wie folgt implementieren:
ShapeAbs.java
Paket com.journaldev.design; public abstract class ShapeAbs implementiert Shape { @Override public double getArea() { // TODO Auto-generated method stub return 0; } }
-
Wir sollten immer versuchen, Programme in Bezug auf Schnittstellen anstelle von Implementierungen zu schreiben, damit wir im Voraus wissen, dass Implementierungsklassen immer die Implementierung bereitstellen und in Zukunft, wenn eine bessere Implementierung verfügbar wird, wir problemlos darauf umschalten können.
Java Interface Implementierungsbeispiel
Jetzt lassen Sie uns einige Implementierungen unseres Shape-Interfaces in Java sehen. Circle.java
package com.journaldev.design;
public class Circle implements Shape {
private double radius;
public Circle(double r){
this.radius = r;
}
@Override
public void draw() {
System.out.println("Drawing Circle");
}
@Override
public double getArea(){
return Math.PI*this.radius*this.radius;
}
public double getRadius(){
return this.radius;
}
}
Hinweis: Beachten Sie, dass die Klasse „Circle“ alle in der Schnittstelle definierten Methoden implementiert hat und auch einige eigene Methoden wie getRadius()
enthält. Die Implementierungen der Schnittstelle können verschiedene Arten von Konstruktoren haben. Schauen wir uns eine weitere Schnittstellenimplementierung für die Schnittstelle „Shape“ an: Rectangle.java
package com.journaldev.design;
public class Rectangle implements Shape {
private double width;
private double height;
public Rectangle(double w, double h){
this.width=w;
this.height=h;
}
@Override
public void draw() {
System.out.println("Drawing Rectangle");
}
@Override
public double getArea() {
return this.height*this.width;
}
}
. Beachten Sie die Verwendung der Überschreibungsannotation und erfahren Sie mehr über Annotationen in Java und warum wir die Überschreibungsannotation immer verwenden sollten, wenn wir eine Methode in Java überschreiben. Hier ist ein Testprogramm, das zeigt, wie man in Bezug auf Schnittstellen und nicht Implementierungen codiert: ShapeTest.java
package com.journaldev.design;
public class ShapeTest {
public static void main(String[] args) {
//Programmierung für Schnittstellen, nicht für Implementierungen
Shape shape = new Circle(10);
shape.draw();
System.out.println("Area="+shape.getArea());
//Wechseln von einer Implementierung zur anderen leicht gemacht
shape=new Rectangle(10,10);
shape.draw();
System.out.println("Area="+shape.getArea());
}
}
. Die Ausgabe des obigen Java-Beispielprogramms für Schnittstellen ist:
Drawing Circle
Area=314.1592653589793
Drawing Rectangle
Area=100.0
Vorteile von Java-Schnittstellen
- . Die Schnittstelle bietet einen Vertrag für alle Implementierungsklassen, daher ist es gut, in Bezug auf Schnittstellen zu codieren, da Implementierungsklassen die von uns verwendeten Methoden nicht entfernen können.
- Schnittstellen sind gut als Ausgangspunkt, um Typen zu definieren und eine Hierarchie auf höchster Ebene in unserem Code zu erstellen.
- Da eine Java-Klasse mehrere Schnittstellen implementieren kann, ist es in den meisten Fällen besser, Schnittstellen als Superklasse zu verwenden.
Nachteile von Java-Schnittstellen
Auch wenn Schnittstellen viele Vorteile bieten, haben sie auch einige Nachteile.
-
Wir müssen Schnittstellenmethoden bei der Gestaltung unseres Projekts sehr sorgfältig auswählen, da wir keine Methoden zu einem späteren Zeitpunkt hinzufügen oder entfernen können. Dies führt zu Kompilierungsfehlern für alle Implementierungsklassen. Manchmal führt dies dazu, dass viele Schnittstellen die Basisschnittstelle in unserem Code erweitern, was schwer zu pflegen ist.
-
Wenn die Implementierungsklassen ihre eigenen Methoden haben, können wir sie nicht direkt in unserem Code verwenden, da der Typ des Objekts eine Schnittstelle ist, die diese Methoden nicht hat. Zum Beispiel erhalten wir im obigen Code einen Kompilierungsfehler für den Code
shape.getRadius()
. Um dies zu überwinden, können wir Typumwandlung verwenden und die Methode so verwenden:Kreis c = (Kreis) form; c.getRadius();
Obwohl die Klassentypumwandlung ihre eigenen Nachteile hat.
Das ist alles, was ich zu Schnittstellen in Java habe. Da wir Java-Schnittstellen viel verwenden, sollten wir uns ihrer Funktionen bewusst sein. Stellen Sie sicher, dass Sie Schnittstellen bei der Gestaltung des Systems verwenden und als Vertrag zwischen dem Client und den Unterklassen, die die Schnittstellen implementieren. Aktualisierung: Java 8 hat die Definition von Schnittstellen mit der Einführung von Standardmethoden und statischen Methodenimplementierungen geändert. Für weitere Details lesen Sie bitte Java 8-Schnittstelle.
Source:
https://www.digitalocean.com/community/tutorials/interface-in-java