User Tools

Site Tools


java:interface_implementation

This is an old revision of the document!


Υλοποίηση του Interface

Μία κλάση υλοποιεί ένα interface μόνο εάν υλοποιεί ΟΛΕΣ τις μεθόδους του interface. Έάν έστω και μία μέθοδος δεν υλοποιείται τότε η κλάση δεν υλοποιεί το interface.

Σε συνέχεια του προηγούμενου παραδείγματος θα επιχειρήσουμε να δημιουργήσουμε δύο διαφορετικές κλάσεις που υλοποιούν το συγκεκριμένο interface. Οι κλάσεις αυτές είναι η ArrayStack που υλοποιεί τη στοίβα μέσω ενός πίνακα και η LinkedStack που υλοποιεί τη στοίβα διασυνδέοντας επιμέρους αντικείμενα μεταξύ τους σε αναλογία με μία διασυνδεδεμένη λίστα.

ArrayStack

ArrayStack.java
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<array.length; i++)
        newArray[i] = array[i];
      array = newArray;
      newArray = null;
    }
    array[size++] = o;
  }
 
  public Object pop() {
    return array[--size];
  }
 
  public Object top() {
    return array[size-1];
  }
 
  public String toString() {
    String str = "@@@@@@@@ - Stack - @@@@@@@@\n";
    for(int i=size-1; i>=0; i--)
      str += array[i].toString()+"\n";
    return str + "@@@@@@@@@@@@@@@@@@@@@@@@@@@\n";
  }  
}

LinkedStack

LinkedStack.java
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.1486114331.txt.gz · Last modified: 2017/02/03 09:32 (external edit)