====== Υλοποίηση του 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 ως τύπος δεδομένων ]] |