Java-Schnittstellen

1. Übersicht

In diesem Tutorial werden wir über Schnittstellen in Java sprechen. Wir werden auch sehen, wie Java sie verwendet, um Polymorphismus und Mehrfachvererbungen zu implementieren.

2. Was sind Schnittstellen in Java?

In Java ist eine Schnittstelle ein abstrakter Typ, der eine Sammlung von Methoden und konstanten Variablen enthält. Es ist eines der Kernkonzepte in Java und wird verwendet, um Abstraktion, Polymorphismus und Mehrfachvererbungen zu erreichen .

Sehen wir uns ein einfaches Beispiel für eine Schnittstelle in Java an:

public interface Electronic { // Constant variable String LED = "LED"; // Abstract method int getElectricityUse(); // Static method static boolean isEnergyEfficient(String electtronicType) { if (electtronicType.equals(LED)) { return true; } return false; } //Default method default void printDescription() { System.out.println("Electronic Description"); } } 

Wir können eine Schnittstelle in einer Java-Klasse implementieren, indem wir das Schlüsselwort implements verwenden .

Als Nächstes erstellen wir auch eine Computerklasse , die die soeben erstellte elektronische Schnittstelle implementiert :

public class Computer implements Electronic { @Override public int getElectricityUse() { return 1000; } } 

2.1. Regeln zum Erstellen von Schnittstellen

In einer Schnittstelle dürfen wir verwenden:

  • Konstanten Variablen
  • abstrakte Methoden
  • statische Methoden
  • Standardmethoden

Wir sollten uns auch daran erinnern:

  • Wir können Schnittstellen nicht direkt instanziieren
  • Eine Schnittstelle kann leer sein und keine Methoden oder Variablen enthalten
  • Wir können das letzte Wort in der Schnittstellendefinition nicht verwenden , da dies zu einem Compilerfehler führt
  • Alle Schnittstellendeklarationen sollten den Modifikator public oder default access haben. Der abstrakte Modifikator wird vom Compiler automatisch hinzugefügt
  • Eine Schnittstellenmethode kann nicht privat , geschützt oder endgültig sein
  • Schnittstelle Variablen sind öffentlich , statische und final definitions; Wir dürfen ihre Sichtbarkeit nicht ändern

3. Was können wir mit ihnen erreichen?

3.1. Verhaltensfunktionalität

Wir verwenden Schnittstellen, um bestimmte Verhaltensfunktionen hinzuzufügen, die von nicht verwandten Klassen verwendet werden können. Zum Beispiel Vergleichbare , Vergleicher und klonbar sind Java - Schnittstellen , die von unabhängigen Klassen implementiert werden können. Unten finden Sie ein Beispiel für die Comparator- OberflächeHiermit werden zwei Instanzen der Employee- Klasse verglichen :

public class Employee { private double salary; public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } } public class EmployeeSalaryComparator implements Comparator { @Override public int compare(Employee employeeA, Employee employeeB) { if (employeeA.getSalary()  employeeB.getSalary()) { return 1; } else { return 0; } } } 

Weitere Informationen finden Sie in unserem Tutorial zu Comparator und Comparable in Java.

3.2. Mehrfachvererbungen

Java-Klassen unterstützen die singuläre Vererbung. Durch die Verwendung von Schnittstellen können wir jedoch auch mehrere Vererbungen implementieren.

Zum Beispiel im Beispiel unten, bemerken wir , dass die Auto - Klasseimplementiert die Fly- und Transform- Schnittstellen. Auf diese Weise erbt es die Methoden fly und transform :

public interface Transform { void transform(); } public interface Fly { void fly(); } public class Car implements Fly, Transform { @Override public void fly() { System.out.println("I can Fly!!"); } @Override public void transform() { System.out.println("I can Transform!!"); } } 

3.3. Polymorphismus

Beginnen wir mit der Frage: Was ist Polymorphismus? Es ist die Fähigkeit eines Objekts, zur Laufzeit verschiedene Formen anzunehmen. Genauer gesagt ist es die Ausführung der Überschreibungsmethode, die sich zur Laufzeit auf einen bestimmten Objekttyp bezieht.

In Java können wir mithilfe von Schnittstellen Polymorphismus erzielen. Beispielsweise kann die Formoberfläche verschiedene Formen annehmen - es kann sich um einen Kreis oder ein Quadrat handeln.

Beginnen wir mit der Definition der Shape- Oberfläche:

public interface Shape { String name(); } 

Jetzt erstellen wir auch die Circle- Klasse:

public class Circle implements Shape { @Override public String name() { return "Circle"; } } 

Und auch die Square- Klasse:

public class Square implements Shape { @Override public String name() { return "Square"; } } 

Schließlich ist es an der Zeit, Polymorphismus mithilfe unserer Shape- Oberfläche und ihrer Implementierungen in Aktion zu sehen . Lassen Sie uns einige instanziiert Form Objekte, fügen Sie sie in eine Liste , und schließlich ihre Namen in einer Schleife drucken:

List shapes = new ArrayList(); Shape circleShape = new Circle(); Shape squareShape = new Square(); shapes.add(circleShape); shapes.add(squareShape); for (Shape shape : shapes) { System.out.println(shape.name()); } 

4. Standardmethoden in Schnittstellen

Herkömmliche Schnittstellen in Java 7 und niedriger bieten keine Abwärtskompatibilität.

Dies bedeutet, dass, wenn Sie Legacy-Code in Java 7 oder früher geschrieben haben und einer vorhandenen Schnittstelle eine abstrakte Methode hinzufügen möchten, alle Klassen, die diese Schnittstelle implementieren, die neue abstrakte Methode überschreiben müssen . Andernfalls wird der Code unterbrochen.

Java 8 löste dieses Problem durch die Einführung der Standardmethode, die optional ist und auf Schnittstellenebene implementiert werden kann.

5. Schnittstellenvererbungsregeln

Um mehrere Vererbungen über Schnittstellen zu erreichen, müssen wir uns einige Regeln merken. Lassen Sie uns diese im Detail durchgehen.

5.1. Schnittstelle Eine andere Schnittstelle erweitern

When an interface extends another interface, it inherits all of that interface's abstract methods. Let's start by creating two interfaces, HasColor and Shape:

public interface HasColor { String getColor(); } public interface Box extends HasColor { int getHeight() } 

In the example above, Box inherits from HasColor using the keyword extends. By doing so, the Box interface inherits getColor. As a result, the Box interface now has two methods: getColor and getHeight.

5.2. Abstract Class Implementing an Interface

When an abstract class implements an interface, it inherits all of its abstract and default methods. Let's consider the Transform interface and the abstract class Vehicle that implements it:

public interface Transform { void transform(); default void printSpecs(){ System.out.println("Transform Specification"); } } public abstract class Vehicle implements Transform {} 

In this example, the Vehicle class inherits two methods: the abstract transform method and the default printSpecs method.

6. Functional Interfaces

Java has had many functional interfaces since its early days, such as Comparable (since Java 1.2) and Runnable (since Java 1.0).

In Java 8 wurden neue Funktionsschnittstellen wie Predicate , Consumer und Function eingeführt . Um mehr darüber zu erfahren, besuchen Sie bitte unser Tutorial zu funktionalen Schnittstellen in Java 8.

7. Fazit

In diesem Tutorial gaben wir einen Überblick über Java-Schnittstellen und sprachen darüber, wie man sie verwendet, um Polymorphismus und Mehrfachvererbungen zu erzielen.

Wie immer sind die vollständigen Codebeispiele auf GitHub verfügbar.