====== Υλοποίηση του Interface ====== Μία κλάση υλοποιεί ένα interface μόνο εάν υλοποιεί ΟΛΕΣ τις μεθόδους του interface. Έάν έστω και μία μέθοδος δεν υλοποιείται τότε η κλάση δεν υλοποιεί το interface. Σε συνέχεια του προηγούμενου παραδείγματος θα επιχειρήσουμε να δημιουργήσουμε δύο διαφορετικές κλάσεις που υλοποιούν το συγκεκριμένο interface. Οι κλάσεις αυτές είναι η ArrayStack που υλοποιεί τη στοίβα μέσω ενός πίνακα και η LinkedStack που υλοποιεί τη στοίβα διασυνδέοντας επιμέρους αντικείμενα μεταξύ τους σε αναλογία με μία διασυνδεδεμένη λίστα. ===== ArrayStack ===== public class ArrayStack implements Stack { public int capacity; public Object []array; public int size; public ArrayStack() { this(256); } public ArrayStack(int capacity) { array = new Object[capacity]; this.capacity = capacity; size = 0; } public int size() { return size; } public void push(Object o) { if( size >= capacity-1 ) { capacity *= 2; Object []newArray = new Object[capacity]; for(int i=0; i=0; i--) str += array[i].toString()+"\n"; return str + "@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"; } } ===== LinkedStack ===== class LinkedNode { private Object o; private LinkedNode next; public LinkedNode(LinkedNode nxt, Object e) { next = nxt; o = e; } public LinkedNode(Object e) { this(null, e); } public Object getElement() { return o; } public LinkedNode getNext() { return next; } public void setElement(Object e) { o = e; } public void setNext(LinkedNode node) { next = node; } } public class LinkedStack implements Stack { int size; LinkedNode head; public LinkedStack() { size=0; head = null; } public int size() { return size; } public void push(Object o) { // the following is OK even if head == null. head = new LinkedNode(head, o); size++; } public Object pop() { LinkedNode pN = head; head = head.getNext(); size--; return pN.getElement(); } public Object top() { return head; } public String toString() { String str = "@@@@@@@@ - Stack - @@@@@@@@\n"; LinkedNode curr = head; while(curr != null) str += curr.getElement().toString(); return str + "@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"; } } Παραπάνω έχουμε υλοποιήσει το συγκεκριμένο //interface// μέσα από δύο διαφορετικές κλάσεις. Αν και η υλοποίηση των κλάσεων διαφέρει σημαντικά, η λειτουργία τους είναι κοινή. Μπορείτε να χρησιμοποιήσετε οποιαδήποτε από της δύο κλάσεις για να εξυπηρετήσετε τη λειτουργικότητα του //interface// **Stack** σε ένα πρόγραμμα. | Προηγούμενο : [[ :java:interface_implementation | Υλοποίηση του interface ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[ :java:interface_as_data_type | Το interface ως τύπος δεδομένων ]] |