java:interface_as_data_type

This is an old revision of the document!


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

====== Το interface ως τύπος δεδομένων ====== Ας υποθέσουμε τώρα ότι θέλουμε να αρχικοποιήσουμε ένα αντικείμενο τύπου //Timer// και περιοδικά να ελέγχουμε εάν ο //timer// έχει λήξει ή όχι. Δείτε το παρακάτω πρόγραμμα το οποίο ελέγχει εάν ο Timer έχει λήξει ή όχι. <code java SleepOnTimer.java> class SleepOnTimer { public static void main(String []args) { //Timer timer = new SimpleTimer(); Timer timer = new StartStopTimer(); System.out.println(new Date()); sleepOnTimer(timer, 5); System.out.println(new Date()); } public static void sleepOnTimer(Timer t, int sleepSeconds) { try { t.setTimer(sleepSeconds); t.startTimer(); while(!t.hasExpired()) { Thread.sleep(sleepSeconds * 1000 / 10); } } catch(Exception ex) { ex.printStackTrace(); } } } </code> <WRAP important 80% center round> Παρατηρήστε ότι η μέθοδος //invertArray// παίρνει ως 2ο όρισμα όχι το αντικείμενο μίας κλάσης αλλά ένα αντικείμενο τύπου interface //Stack//! Στην πραγματικότητα αυτό που δηλώνει η συγκεκριμένη μέθοδος είναι ότι ως 2ο όρισμα παίρνει ένα αντικείμενο του οποίου η κλάση υλοποιεί το interface //Stack//. Επίσης, δηλώνει ότι από όλες τις διαθέσιμες μεθόδους της κλάσης μπορούν να χρησιμοποιηθούν μόνο οι μέθοδοι που δηλώνονται στο interface. </WRAP> <WRAP todo 80% center round> Στο παραπάνω πρόγραμμα, αλλάξτε την γραμμή <code java> Stack stack = new ArrayStack(); </code> σε <code java> Stack stack = new LinkedStack(); </code> Παρατηρήστε αν σας βγάζει κάποιο μήνυμα ο //compiler// και εάν εκτελώντας το πρόγραμμα παράγεται το ίδιο τελικό αποτέλεσμα. Τι συμπέρασμα βγάζετε για τη χρήση της στοίβας από την μέθοδο //invertArray()//; </WRAP> | Προηγούμενο : [[ :java:interface_implementation | Υλοποίηση του interface ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[ :java:interface_modification | Μεταβολή υφιστάμενου interface ]] |

java/interface_as_data_type.1490966785.txt.gz · Last modified: 2017/03/31 13:26 by gthanos