Checkmark on Circle.png

Interface

Aus KGS-Wiki

Ein Interface (engl. Schnittstelle) ist in der objektorientierten Programmierung eine Möglichkeit, für bestimmte Klassen festzulegen, welche Methoden sie aufweisen sollen, ohne diese zu definieren. Wie sie diese Methoden ausdefinieren, obliegt jeder Klasse, die dieses Interface implementiert, selbst.

Im Gegensatz zur abstrakten Klasse können Interfaces nur Methodenköpfe und keine ausprogrammierten Methoden enthalten. Dafür dürfen Klassen auch beliebig viele Interfaces implementieren, während Mehrfachvererbung, also das Erben von mehreren Oberklassen, in vielen Programmiersprachen verboten ist. Die Implementierung von mehreren Interfaces ist deshalb möglich, weil die vorgegebenen Methoden ja sowieso von der Klasse definiert werden müssen und keine Konflikte auftreten können.

Beispiel: Comparable

Ein typisches Interface ist Comparable. Objekte von Klassen, die Comparable sind, können in irgendeiner Hinsicht miteinander verglichen und damit z.B. auch sortiert werden. In der Java-API ist zum Beispiel für die Methode Arrays.sort, mit der Arrays sortiert werden können, festgelegt:

public static void sort(Object[] a)

Sorts the specified array of objects into ascending order, according to the natural ordering of its elements. All elements in the array must implement the Comparable interface [eigene Hervorhebung]. Furthermore, all elements in the array must be mutually comparable (that is, e1.compareTo(e2) must not throw a ClassCastException for any elements e1 and e2 in the array).[1]

Jede Klasse, die dieses Interface implementiert, muss eine Methode namens compareTo enthalten, die es ermöglicht, die Objekte dieser Klasse mit anderen Objekten zu vergleichen:

public class Person implements Comparable<Person> {

    private String firstName;
    private String lastName;

    public Person(String first, String last) {
        this.firstName = first;
        this.lastName = last;
    }

    public int compareTo(Person other) {
        if (this.lastName.equals(other.lastName)) {
            return this.firstName.compareTo(other.firstName);
        }
        return this.lastName.compareTo(other.lastName);
    }
}

Ein Array von Personen könnte nun mit Arrays.sort sortiert werden. Das Interface kann nun auch wie ein Datentyp angegeben werden, etwa um Methoden wie diese zu definieren:

public Comparable max(Comparable a, Comparable b) {
    if (a.compareTo(b) > 0) {
        return a;
    }
    return b;
}

Dieser Methode ist es völlig gleich, was für Objekte ihr übergeben werden, solange diese das Comparable-Interface implementieren. Auch über den Rückgabetypen kann nur ausgesagt werden, dass es ein Comparable ist.

Aufrufe wie new Comparable() sind hingegen nicht zulässig, da Interfaces nicht instanziiert werden können.

Quellen

Weblinks

Interfaces im Java-Tutorial 🇩🇪