java:interface_as_data_type

Το interface ως τύπος δεδομένων

Ας υποθέσουμε τώρα ότι θέλουμε να χρησιμοποιήσουμε μία στοίβα για να αντιμεταθέσουμε τα στοιχεία ενός πίνακα χαρακτήρων. Ο πίνακας αρχικά περιέχει την αγγλική αλφαβήτα (26 χαρακτήρες) και θέλουμε να αντιστρέψουμε την σειρά με την οποία αποθηκεύονται οι χαρακτήρες στον πίνακα. Η μέθοδος invertArray παρακάτω αντιμεταθέτει τα στοιχεία του πίνακα array με χρήση της στοίβας stk.

ArrayManipulator.java
public class ArrayManipulator {
  public static void main(String []args) {
    Character alphabet[] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
    printCharacterArray(alphabet);
    System.out.println("-----------");
 
    Stack stack = new ArrayStack();
    invertArray(alphabet, stack);
 
    printCharacterArray(alphabet);
  }
 
  public static void invertArray(Object []array, Stack stk) {
    for(int i=0; i<array.length; i++)
      stk.push(array[i]);
    for(int i=0; i<array.length; i++)
      array[i] = stk.pop();
  }
 
  public static void printCharacterArray(Character []array) {
    for(Character c : array)
      System.out.print(c+"   ");
    System.out.println("");
  }
}

Παρατηρήστε ότι η μέθοδος invertArray παίρνει ως 2ο όρισμα όχι το αντικείμενο μίας κλάσης αλλά ένα αντικείμενο τύπου interface Stack! Στην πραγματικότητα αυτό που δηλώνει η συγκεκριμένη μέθοδος είναι ότι ως 2ο όρισμα παίρνει ένα αντικείμενο του οποίου η κλάση υλοποιεί το interface Stack. Επίσης, δηλώνει ότι από όλες τις διαθέσιμες μεθόδους της κλάσης μπορούν να χρησιμοποιηθούν μόνο οι μέθοδοι που δηλώνονται στο interface.

Στο παραπάνω πρόγραμμα, αλλάξτε την γραμμή

Stack stack = new ArrayStack();

σε

Stack stack = new LinkedStack();

Παρατηρήστε αν σας βγάζει κάποιο μήνυμα ο compiler και εάν εκτελώντας το πρόγραμμα παράγεται το ίδιο τελικό αποτέλεσμα. Τι συμπέρασμα βγάζετε για τη χρήση της στοίβας από την μέθοδο invertArray();

java/interface_as_data_type.txt · Last modified: 2017/03/31 14:32 by gthanos