java:tostring

This is an old revision of the document!


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

====== Η μέθοδος toString ====== ===== Αναπαράσταση δεδομένων αντικειμένου σε μορφή κειμένου ===== Θυμηθείτε την κλάση **Point** που ορίσαμε σε προηγούμενη ενότητα. Θα θέλαμε να μπορούμε να γράψουμε: <code java> Point aPoint = new Point(4, 5); System.out.println(aPoint); </code> και να εκτυπωθούν στην οθόνη τα δεδομένα του σημείου που ορίσαμε, σε κατανοητή μορφή κειμένου η οποία διαβάζεται εύκολα από τον χρήστη, για παράδειγμα, ''(4, 5)'' Αν όμως εκτελέσουμε το παραπάνω κομμάτι κώδικα, τότε θα εκτυπωθεί κάτι αρκετά διαφορετικό: ''Point@5ffdfb42'', το οποίο αποτελείται από το όνομα της κλάσης στην οποία ανήκει το αντικείμενό μας και ένα ειδικό κωδικό (hash code) τον οποίο δε θα καλύψουμε στα πλαίσια αυτού του μαθήματος. Αυτό που δε φαίνεται στον κώδικα είναι ότι όταν ζητάμε να αντιμετωπιστεί ένα αντικείμενο ως κείμενο (πχ. για να εκτυπωθεί στην οθόνη) τότε καλείται έμμεσα μια συνάρτηση με όνομα toString η οποία είναι προκαθορισμένη για κάθε κλάση και επιστρέφει ένα String όπως το Point@5ffdfb42. Στην πραγματικότητα ο κώδικας που εκτελέστηκε ήταν : <code java> System.out.println(aPoint.toString()); </code> Το ερώτημα είναι, πώς μπορούμε να εκτυπώσουμε το πιο φιλικό ''(4, 5)'' ; Ένας απλός τρόπος είναι χρησιμοποιώντας τους getters που παρέχει η κλάση: <code java> System.out.println( "(" + aPoint.getX() + ", " + aPoint.getY() + ")"); </code> Δύο μειονεκτήματα αυτής της λύσης είναι ότι συχνά μια κλάση δεν παρέχει getters για όλα τα πεδία που πιθανώς θέλουμε να εμφανίζονται σε μια "κειμενική" αναπαράσταση και το ότι υποχρεώνουμε τον χρήστη της κλάσης να υλοποιήσει μια λειτουργία που θα ήταν πιο σωστό να παρέχει άμεσα η ίδια η κλάση. Ο σωστός τρόπος να επιτύχουμε αυτό που θέλουμε είναι υπερκαλύπτοντας τη μέθοδο **toString()**. Η υπερκάλυψη (**override**) μιας μεθόδου θα εξηγηθεί λεπτομερώς σε επόμενη ενότητα. Προς το παρόν, αρκεί να γνωρίζετε τα εξής: - Η μέθοδος toString είναι ήδη ορισμένη για όλες τις κλάσεις και επιστρέφει μια κειμενική αναπαράσταση ενός αντικειμένου. - Υπάρχει η δυνατότητα να την ξαναορίσουμε σε μια κλάση, υλοποιώντας τη με τον τρόπο που θέλουμε - Η δική μας υλοποίηση, εφόσον υπάρχει, έχει προτεραιότητα έναντι της προκαθορισμένης υλοποίησης. Ορίζουμε λοιπόν στην κλάση Point: <code java> @Override public String toString () { return "(" + x + ", " + y + ")"; } </code> και τώρα όταν γράψουμε στο πρόγραμμά μας <code java> System.out.println(aPoint); </code> θα δούμε στην οθόνη: ''(4, 5)'' |Προηγούμενο: [[:java:member_initialization | Αρχικοποίηση των μελών της κλάσης ]] | [[:toc | Περιεχόμενα]] | Επόμενο: [[:java:packages:intro | Πακέτα στη γλώσσα προγραμματισμού Java ]]|

java/tostring.1455885085.txt.gz · Last modified: 2016/02/26 11:15 (external edit)