Οι interfaces είναι το κύριο μέσο για την αποσύζευξη των χρήσεων μιας κλάσης από την υλοποίησή της.
Αυτή η αποσύζευξη προσφέρει ευελιξία στη συντήρηση της υλοποίησης και βοηθά στην υποστήριξη γενικευμένης συμπεριφοράς με ασφάλεια τύπων.
Η σύνταξη μιας διεπαφής είναι παρόμοια με αυτή μιας κλάσης, με τη διαφορά ότι οι μέθοδοι εμφανίζονται μόνο ως υπογραφή και δεν παρέχεται σώμα.
public interface Language {
String speak();
}
public interface ItalianLanguage extends Language {
String speak();
String speakItalian();
}
public interface ScriptConverter {
void setVersion(String version);
String getVersion();
String convertCyrillicToLatin(String cyrillic);
}
Η κλάση που την υλοποιεί πρέπει να υλοποιεί όλες τις λειτουργίες που ορίζει η διεπαφή.
Οι διεπαφές συνήθως κάνουν ένα ή περισσότερα από τα παρακάτω:
Comparable<T>)public class ItalianTraveller implements ItalianLanguage {
public String speak() {
return "Ciao mondo";
}
public String speakItalian() {
return speak();
}
}
public class ItalianTravellerV2 implements ItalianLanguage {
public String speak() {
return "migliorata - Ciao mondo";
}
public String speakItalian() {
return speak();
}
}
public class FrenchTraveller implements Language {
public String speak() {
return "Ça va?";
}
}
public class RussianTraveller implements Language, ScriptConverter {
private String version;
public void setVersion(String version) {
this.version = version;
}
public String getVersion() {
return version;
}
public String speak()
{
return "Привет мир";
}
public String convertCyrillicToLatin(String cyrillic) {
throw new UnsupportedOperationException();
}
}
public class DocumentTranslator implements ScriptConverter {
private String version;
public void setVersion(String version) {
this.version = version;
}
public String getVersion() {
return version;
}
public String translate(String russian) {
throw new UnsupportedOperationException();
}
public String convertCyrillicToLatin(String cyrillic) {
throw new UnsupportedOperationException();
}
}
Ο κώδικας που χρησιμοποιεί τις παραπάνω διεπαφές και κλάσεις μπορεί:
Οι διεπαφές χρησιμοποιούνται ευρέως για την υποστήριξη των δοκιμών, καθώς επιτρέπουν εύκολο mocking.
Οι διεπαφές μπορούν να επεκτείνουν άλλες διεπαφές με τη λέξη-κλειδί extend.
Τα μέλη μιας διεπαφής είναι δημόσια εξ ορισμού.
Οι διεπαφές μπορούν να περιέχουν εμφωλευμένους τύπους: interfaces, enums και classes.
Εδώ, οι διεπαφές που τους περιέχουν λειτουργούν ως χώροι ονομάτων.
Οι εμφωλευμένοι τύποι προσπελαύνονται εκτός της διεπαφής προτάσσοντας το όνομα της διεπαφής και χρησιμοποιώντας σύνταξη με τελεία για τον προσδιορισμό του μέλους.
Εκ σχεδιασμού, η Java δεν υποστηρίζει πολλαπλή κληρονομικότητα, αλλά διευκολύνει ένα είδος πολλαπλής κληρονομικότητας μέσω των διεπαφών.
Επιπλέον, η ιδέα ότι ο πολυμορφισμός μπορεί να υλοποιηθεί μέσω διεπαφών στηρίζει τον μηχανισμό των διεπαφών.