java:interface_definition

Δήλωση του Interface

Παρακάτω δίνεται το παράδειγμα ορισμού ενός Interface ως εξής:

public interface MyInterface extends Interface1, Interface2, Interface3 {
 
    // constant declarations    
    // base of natural logarithms
    double E = 2.718282;
    double PI = 3.14159;
 
    // method signatures
    public void interfaceMethod(int i, double x);
    public int interfaceMethod2(String s);
}
  • public ή κανένας προσδιοριστής πρόσβασης: Αν οριστεί public τότε το interface είναι ορατό από όλες τις κλάσεις και όλα τα πακέτα στην Java. Αν δεν οριστεί κάτι (package private) τότε το interface είναι ορατό μόνο μέσα στο πακέτο στο οποίο δηλώνεται.
  • interface: δεσμευμένη λέξη
  • το όνομα του interface: στο παράδειγμα μας MyInterface.
  • extends: ένα ή περισσότερα interfaces τα οποία επεκτείνει το συγκεκριμένο interface (comma seperated).

Τόσο στις κλάσεις όσο και στα interfaces ορίζεται η ιδιότητα της κληρονομικότητας. Η διαφορά είναι ότι ενώ στην κλάση μπορούμε να έχουμε μόνο μία γονική κλάση, στα interfaces μπορούμε να έχουμε περισσότερα του ενός γονικά interfaces.

Ακριβώς όπως και οι κλάσεις κάθε interface πρέπει να βρίσκεται σε ξεχωριστό αρχείο, όπου το όνομα του αρχείου ταυτίζεται με το όνομα του interface και έχει κατάληξη .java. Για παράδειγμα το interface με όνομα MyInterface θα βρίσκεται σε ένα αρχείο με όνομα MyInterface.java.

Το σώμα του Interface

Ένα interface μπορεί να περιέχει πεδία όπως στο παραπάνω παράδειγμα.

double E = 2.718282;
double PI = 3.14159;

Τα πεδία αυτά εξ ορισμού (by default) public, static, final, δηλ είναι σταθερές που ανήκουν στις κλάσεις που θα υλοποιήσουν το interface στο οποίο δηλώνονται.

Οι μέθοδοι σε ένα interface κατά κανόνα είναι abstract, δηλαδή περιέχεται μόνο η δήλωση της μεθόδου χωρίς σώμα (δηλ. υλοποίηση). Επίσης, όλες οι μέθοδοι σε ένα interface είναι εξ ορισμού public, κατά συνέπεια ο προσδιορισστής public μπορεί να παραληφθεί δηλ

public interface MyInterface extends Interface1, Interface2, Interface3 {
 
    // constant declarations    
    // base of natural logarithms
    double E = 2.718282;
    double PI = 3.14159;
 
    // method signatures
    public void interfaceMethod1(int i, double x);
    public int interfaceMethod2(String s);
}

Παράδειγμα interface - H Στοίβα (Stack)

Ας υποθέσουμε ότι θέλουμε να δηλώσουμε μέσω ενός interface της μεθόδους που πρέπει να υποστηρίζει μία στοίβα. Η στοίβα είναι μία δομή αποθήκευσης δεδομένων τύπου Last In First Out (LIFO), όπου το αντικείμενο αποθηκεύεται στη στοίβα τελευταίο εξάγεται από αυτή πρώτο.

Στο παρακάτω σχήμα δίνεται η γραφική απεικόνιση μιας στοίβας που αποθηκεύει ακέραιους αριθμούς. Αρχικά είναι αποθηκευμένο το 1 και στη συνέχεια αποθηκεύεονται τα 2,3,4,5,6. Παρατηρήστε ότι η σειρά με την οποία αφαιρούνται οι αριθμοί είναι η αντίστροφη δηλ 6,5,4,3,2,1.

Γραφική απεικόνιση μιας στοίβας που αποθηκεύει ακέραιους αριθμούς

Κάθε στοίβα θα πρέπει να υποστηρίζει κατ' ελάχιστο τα εξής:

  • μέθοδο επιστροφής του μεγέθους της στοίβας.
  • μέθοδο ένθεσης στην κορυφή της στοίβας.
  • μέθοδο απόσβεσης του κορυφαίου στοιχείου.
  • μέθοδο επιστροφής του κορυφαίου στοιχείου της στοίβας χωρίς διαγραφή από τη στοίβα.

Παρακάτω δηλώνεται το interface Stack που υποστηρίζει αυτές τις λειτουργίες

Stack.java
public interface Stack {
  public int size();           // επιστροφή του μεγέθους της στοίβας.
  public void push(Object o);  // ένθεση στην κορυφή της στοίβας.
  public Object pop();         // απόσβεση από την κορυφή της στοίβας.
  public Object top();         // επιστροφή του κορυφαίου στοιχείου της στοίβας χωρίς διαγραφή του.
}
java/interface_definition.txt · Last modified: 2017/03/31 14:37 by gthanos