java:interface_definition

This is an old revision of the document!


A PCRE internal error occured. This might be caused by a faulty plugin

====== Δήλωση του Interface ====== Παρακάτω δίνεται το παράδειγμα ορισμού ενός Interface ως εξής: <code java> 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); } </code> * **public ή κανένας προσδιοριστής πρόσβασης:** Αν οριστεί //public// τότε το interface είναι ορατό από όλες τις κλάσεις και όλα τα πακέτα στην Java. Αν δεν οριστεί κάτι (package private) τότε το interface είναι ορατό μόνο μέσα στο πακέτο στο οποίο δηλώνεται. * **interface:** δεσμευμένη λέξη * **το όνομα του interface:** στο παράδειγμα μας ''MyInterface''. * **extends:** ένα ή περισσότερα interfaces τα οποία επεκτείνει το συγκεκριμένο interface (comma seperated). Τόσο στις κλάσεις όσο και στα interfaces ορίζεται η ιδιότητα της κληρονομικότητας. __Η διαφορά είναι ότι ενώ στην κλάση μπορούμε να έχουμε μόνο μία γονική κλάση, στα interfaces μπορούμε να έχουμε περισσότερα του ενός γονικά interfaces__. <WRAP tip 80% center round> Ακριβώς όπως και οι κλάσεις κάθε interface πρέπει να βρίσκεται σε ξεχωριστό αρχείο, όπου το όνομα του αρχείου ταυτίζεται με το όνομα του interface και έχει κατάληξη **.java**. Για παράδειγμα το interface με όνομα **MyInterface** θα βρίσκεται σε ένα αρχείο με όνομα **MyInterface.java**. </WRAP> ===== Το σώμα του Interface ===== Ένα //interface// μπορεί να περιέχει πεδία όπως στο παραπάνω παράδειγμα. <code java> double E = 2.718282; double PI = 3.14159; </code> Τα πεδία αυτά εξ ορισμού (by default) ''public, static, final'', δηλ είναι **__σταθερές__** που ανήκουν στις κλάσεις που θα υλοποιήσουν το interface στο οποίο δηλώνονται. Οι μέθοδοι σε ένα interface κατά κανόνα είναι **abstract**, δηλαδή περιέχεται μόνο η δήλωση της μεθόδου χωρίς σώμα (δηλ. υλοποίηση). Επίσης, όλες οι μέθοδοι σε ένα interface είναι εξ ορισμού //public//, κατά συνέπεια ο προσδιορισστής //public// μπορεί να παραληφθεί δηλ <code java> 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); } </code> ===== Παράδειγμα interface - H Στοίβα (Stack) ===== Ας υποθέσουμε ότι θέλουμε να δηλώσουμε μέσω ενός interface της μεθόδους που πρέπει να υποστηρίζει μία στοίβα. Η στοίβα είναι μία δομή αποθήκευσης δεδομένων τύπου **Last In First Out (LIFO)**, όπου το αντικείμενο αποθηκεύεται στη στοίβα τελευταίο εξάγεται από αυτή πρώτο. Κάθε στοίβα θα πρέπει να υποστηρίζει κατ' ελάχιστο τα εξής: * μέθοδο επιστροφής του μεγέθους της στοίβας. * μέθοδο ένθεσης στην κορυφή της στοίβας. * μέθοδο απόσβεσης του κορυφαίου στοιχείου. * μέθοδο επιστροφής του κορυφαίου στοιχείου της στοίβας χωρίς διαγραφή από τη στοίβα. Παρακάτω δηλώνεται το //interface Stack// που υποστηρίζει αυτές τις λειτουργίες <code java Stack.java> public interface Stack { public int size(); // επιστροφή του μεγέθους της στοίβας. public void push(Object o); // ένθεση στην κορυφή της στοίβας. public Object pop(); // απόσβεση από την κορυφή της στοίβας. public Object top(); // επιστροφή του κορυφαίου στοιχείου της στοίβας χωρίς διαγραφή του. } </code> | Προηγούμενο : [[ :java:interface | Διεπαφή (interface) ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[ :java:interface_implementation | Υλοποίηση του interface ]] |

java/interface_definition.1487254929.txt.gz · Last modified: 2017/02/16 14:22 by gthanos