Διεπαφή (interface)
Γενικές αρχές για διεπαφές
Μια διεπαφή είναι μια "κλάση" που περιέχει αποκλειστικά υπογραφές μεθόδων ή αν προτιμάτε abstract μεθόδους.
Υπογραφή μεθόδου (method signature) λέγεται η μέθοδος που δεν περιέχει σώμα (ούτε άγκιστρα). Για παράδειγμα:
double getArea(double width, double height);
Μια διεπαφή δηλώνεται με τον προσδιοριστή interface. Για παράδειγμα:
public interface Car { int turn(double radius, double startSpeed, double endSpeed); ... }
Μια διεπαφή μπορεί να περιέχει μεταβλητές οι οποίες είναι υποχρεωτικά public, static και final.
Δεν μπορούμε να δημιουργήσουμε αντικείμενα από μια διεπαφή.
Μια διεπαφή μπορεί να κάνει extend μία ή περισσότερες διεπαφές (πολυκληρονομικότητα).
Μια κλάση μπορεί να κάνει implement (υλοποίηση) μία ή περισσότερες διεπαφές. Για παράδειγμα:
public class Rec implements Shape { double getArea(double width, double height) { //υλοποίηση } }
Μια κλάση που κάνει implement μια διεπαφή, πρέπει υποχρεωτικά να υλοποιεί όλες τις μεθόδους της διεπαφής.
Γενικό παράδειγμα
interface Shape { double getWidth(); double getHeight(); void setWidth(double w); void setHeight(double h); double getArea(); } class Rectangle implements Shape { private double width=0, height=0; @Override public double getWidth() { return width; } @Override public double getHeight() { return height; } @Override public void setWidth(double w) { width=w; } @Override public void setHeight(double h) { height=h; } @Override public double getArea() { return width*height; } //Δημιουργός που θέτει αρχικές τιμές 0 και 0 σε πλάτος και ύψος Rectangle() { width = 0; height = 0; } //Δημιουργός που θέτει αρχικές τιμές w και h σε πλάτος και ύψος Rectangle(double w, double h) { width = w; height = h; } } public class Main { public static void main(String[] args) { //Δημιουργώ το αντικείμενο έστω rec1 με τον πρώτο δημιουργό Rectangle rec1 = new Rectangle(); //Δημιουργώ το αντικείμενο έστω rec2 με τον δεύτερο δημιουργό Rectangle rec2 = new Rectangle(2.6, 3.5); //κάνω σετ τις διαστάσεις του rec1 rec1.setWidth(2.5); rec1.setHeight(3.7); //διαβάζω το εμβαδόν του rec1 double a1 = rec1.getArea(); //διαβάζω το εμβαδόν του rec2 double a2 = rec2.getArea(); //συγκρίνω τα δύο εμβαδά και εκτυπώνω μήνυμα if(a1>a2) { System.out.println("το πρώτο ορθογώνιο είναι μαγαλύτερο από το δεύτερο"); } else if(a1<a2) { System.out.println("το πρώτο ορθογώνιο είναι μικρότερο από το δεύτερο"); } else { System.out.println("τα εμβαδά των δύο ορθογωνίων είναι ίσα"); } } }
UML Διάγραμμα για διεπαφή
Στα uml διαγράμματα η διεπαφή απεικονίζεται όπως παρακάτω: