java:tostring

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
java:tostring [2016/02/19 12:31]
doufexi created
java:tostring [2017/02/16 12:17] (current)
gthanos
Line 11: Line 11:
 </​code>​ </​code>​
  
-και να εκτυπωθούν στην οθόνη τα δεδομένα του σημείου που ορίσαμε,​ σε κατανοητή μορφή κειμένου η οποία διαβάζεται εύκολα από τον χρήστη,​ για παράδειγμα,​ ''​(4,​ 5)''​+και να εκτυπωθούν στην οθόνη τα δεδομένα του σημείου που ορίσαμε, δηλαδή οι συντεταγμένες, σε κατανοητή μορφή κειμένου η οποία διαβάζεται εύκολα από τον χρήστη,​ για παράδειγμα,​ ''​(4,​ 5)''​
  
-Αν όμως εκτελέσουμε το παραπάνω κομμάτι κώδικα,​ τότε θα εκτυπωθεί κάτι αρκετά διαφορετικό:​ ''​Point@5ffdfb42'',​ το οποίο αποτελείται από το όνομα της κλάσης στην οποία ανήκει το αντικείμενό μας και ένα ειδικό κωδικό (hash code) τον οποίο ​δε θα καλύψουμε στα πλαίσια αυτού του μαθήματος+Αν όμως εκτελέσουμε το παραπάνω κομμάτι κώδικα,​ τότε θα εκτυπωθεί κάτι αρκετά διαφορετικό:​ ''​Point@5ffdfb42'',​ το οποίο αποτελείται από το όνομα της κλάσης στην οποία ανήκει το αντικείμενό μας και ένα ειδικό κωδικό (hash code) για ​τον οποίο μπορείτε να διαβάσετε [[:​java:​object_class | στην ενότητα για την κλάση Object ]]
  
-Αυτό που δε φαίνεται στον κώδικα είναι ότι όταν ζητάμε να αντιμετωπιστεί ένα αντικείμενο ως κείμενο (πχ. για να εκτυπωθεί στην οθόνη) τότε καλείται έμμεσα μια συνάρτηση με όνομα toString η οποία είναι προκαθορισμένη για κάθε κλάση και επιστρέφει ένα String όπως το Point@5ffdfb42. Στην πραγματικότητα ο κώδικας που εκτελέστηκε ήταν :+Αυτό που δε φαίνεται στον κώδικα είναι ότι όταν ζητάμε να αντιμετωπιστεί ένα αντικείμενο ως κείμενο (πχ. για να εκτυπωθεί στην οθόνη) τότε καλείται έμμεσα μια συνάρτηση με όνομα ​**toString** η οποία είναι προκαθορισμένη για κάθε κλάση και επιστρέφει ένα String όπως το ''​Point@5ffdfb42''​. Στην πραγματικότητα ο κώδικας που εκτελέστηκε ήταν :
  
 <code java> <code java>
Line 29: Line 29:
 </​code>​ </​code>​
  
-Δύο μειονεκτήματα αυτής της λύσης είναι ότι συχνά μια κλάση δεν ​παρέχει getters για όλα τα πεδία που πιθανώς θέλουμε να εμφανίζονται ​σε μια ​"κειμενική"​ αναπαράσταση και το ότι υποχρεώνουμε τον χρήστη της κλάσης να υλοποιήσει μια λειτουργία που θα ήταν πιο σωστό να παρέχει άμεσα η ίδια η κλάση.+Ένα σημαντικό μειονέκτημα της παραπάνω "λύσης" είναι ότι υποχρεώνουμε το χρήστη της κλάσης να υλοποιήσει μια λειτουργία που θα ήταν πιο σωστό να παρέχει άμεσα η ίδια η κλάση. Η κλάση είναι αυτή που έχει πρόσβαση σε όλα τα πεδία (πιθανώς να μην διατίθενται getters για όλα), και μπορεί να εγγυηθεί ότι η κειμενική αναπαράσταση θα έχει πάντα ακριβώς την ίδια μορφή
  
 Ο σωστός τρόπος να επιτύχουμε αυτό που θέλουμε είναι υπερκαλύπτοντας τη μέθοδο **toString()**. Η υπερκάλυψη (**override**) μιας μεθόδου θα εξηγηθεί λεπτομερώς σε επόμενη ενότητα. Προς το παρόν, αρκεί να γνωρίζετε τα εξής: Ο σωστός τρόπος να επιτύχουμε αυτό που θέλουμε είναι υπερκαλύπτοντας τη μέθοδο **toString()**. Η υπερκάλυψη (**override**) μιας μεθόδου θα εξηγηθεί λεπτομερώς σε επόμενη ενότητα. Προς το παρόν, αρκεί να γνωρίζετε τα εξής:
  
-Η μέθοδος toString είναι ήδη ορισμένη για όλες τις κλάσεις και επιστρέφει μια κειμενική αναπαράσταση ενός αντικειμένου.  +Η μέθοδος ​**toString** είναι ήδη ορισμένη για όλες τις κλάσεις και επιστρέφει μια κειμενική αναπαράσταση ενός αντικειμένου.  
-Υπάρχει η δυνατότητα να την ξαναορίσουμε σε μια κλάση, υλοποιώντας τη με τον τρόπο που θέλουμε +Υπάρχει η δυνατότητα να την ξαναορίσουμε σε μια κλάση, υλοποιώντας τη με τον τρόπο που θέλουμε 
-Η δική μας υλοποίηση,​ εφόσον υπάρχει,​ έχει προτεραιότητα έναντι της προκαθορισμένης υλοποίησης. ​+Η δική μας υλοποίηση,​ εφόσον υπάρχει,​ έχει προτεραιότητα έναντι της προκαθορισμένης υλοποίησης. ​
  
 Ορίζουμε λοιπόν στην κλάση Point: ​ Ορίζουμε λοιπόν στην κλάση Point: ​
Line 52: Line 52:
 </​code> ​ </​code> ​
  
-θα δούμε στην οθόνη: ''​(4,​ 5)''​+θα εμφανιστεί στην οθόνη: ''​(4,​ 5)''​
  
-|Προηγούμενο:​ [[:​java:​member_initialization | Αρχικοποίηση των μελών της κλάσης ]] | [[:toc | Περιεχόμενα]] | Επόμενο:​ [[:java:packages:​intro ​Πακέτα στη γλώσσα ​προγραμματισμού ​Java ]]|+|Προηγούμενο:​ [[:​java:​member_initialization | Αρχικοποίηση των μελών της κλάσης ]] | [[:toc | Περιεχόμενα]] | Επόμενο:​ [[:java:wrapper_classes ​Βασικοί τύποι δεδομένων και ισοδύναμοι αναφορικοί τύποι ​]]|
java/tostring.1455885085.txt.gz · Last modified: 2016/02/26 11:15 (external edit)