User Tools

Site Tools


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] – created doufexijava:tostring [2022/02/24 12:42] (current) – external edit 127.0.0.1
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. Στην πραγματικότητα, ο compiler βλέπει ότι η μέθοδος //println// λαμβάνει ως όρισμα ένα αντικείμενο τύπου String και καλεί την μέθοδο **toString** (η μέθοδος επιστρέφει String) για το αντικείμενο της κλάσης. Τελικά ο κώδικας που εκτελέστηκε ήταν :
  
 <code java> <code java>
Line 29: Line 29:
 </code> </code>
  
-Δύο μειονεκτήματα αυτής της λύσης είναι ότι συχνά μια κλάση δεν παρέχει getters για όλα τα πεδία που πιθανώς θέλουμε να εμφανίζονται σε μια "κειμενική" αναπαράσταση και το ότι υποχρεώνουμε τον χρήστη της κλάσης να υλοποιήσει μια λειτουργία που θα ήταν πιο σωστό να παρέχει άμεσα η ίδια η κλάση.+Ένα σημαντικό μειονέκτημα της παραπάνω "λύσης" είναι ότι υποχρεώνουμε το χρήστη της κλάσης να υλοποιήσει μια λειτουργία που θα ήταν πιο σωστό να παρέχει αυτόματα η ίδια η κλάση. Η κλάση είναι αυτή που έχει πρόσβαση σε όλα τα πεδία (πιθανώς να μην διατίθενται getters για όλα), και μπορεί να εγγυηθεί ότι η κειμενική αναπαράσταση θα έχει πάντα ακριβώς την ίδια μορφή
  
 Ο σωστός τρόπος να επιτύχουμε αυτό που θέλουμε είναι υπερκαλύπτοντας τη μέθοδο **toString()**. Η υπερκάλυψη (**override**) μιας μεθόδου θα εξηγηθεί λεπτομερώς σε επόμενη ενότητα. Προς το παρόν, αρκεί να γνωρίζετε τα εξής: Ο σωστός τρόπος να επιτύχουμε αυτό που θέλουμε είναι υπερκαλύπτοντας τη μέθοδο **toString()**. Η υπερκάλυψη (**override**) μιας μεθόδου θα εξηγηθεί λεπτομερώς σε επόμενη ενότητα. Προς το παρόν, αρκεί να γνωρίζετε τα εξής:
  
-Η μέθοδος toString είναι ήδη ορισμένη για όλες τις κλάσεις και επιστρέφει μια κειμενική αναπαράσταση ενός αντικειμένου.  +<WRAP tip 80% center round> 
-Υπάρχει η δυνατότητα να την ξαναορίσουμε σε μια κλάση, υλοποιώντας τη με τον τρόπο που θέλουμε +  * Η μέθοδος **toString** είναι ήδη ορισμένη για όλες τις κλάσεις και επιστρέφει μια κειμενική αναπαράσταση για κάθε αντικείμενο.  
-Η δική μας υλοποίηση, εφόσον υπάρχει, έχει προτεραιότητα έναντι της προκαθορισμένης υλοποίησης. +  Υπάρχει η δυνατότητα να ξαναορίσουμε τη μέθοδο **toString** σε μια κλάση, υλοποιώντας τη με τον τρόπο που θέλουμε. 
 +  Η δική μας υλοποίηση, εφόσον υπάρχει, έχει προτεραιότητα έναντι της προκαθορισμένης υλοποίησης.  
 +</WRAP>
  
-Ορίζουμε λοιπόν στην κλάση Point: +Ορίζουμε λοιπόν στην κλάση Point την μέθοδο ''public String toString()'' ως εξής
  
 <code java> <code java>
Line 52: Line 54:
 </code>  </code> 
  
-θα δούμε στην οθόνη: ''(4, 5)''+θα εμφανιστεί στην οθόνη: ''(4, 5)''.  
  
-|Προηγούμενο: [[:java:member_initialization | Αρχικοποίηση των μελών της κλάσης ]] | [[:toc | Περιεχόμενα]] | Επόμενο: [[:java:packages:intro Πακέτα στη γλώσσα προγραμματισμού Java ]]|+|Προηγούμενο: [[:java:string| Αλφαριθμητικά ]] | [[:toc | Περιεχόμενα]] | Επόμενο: [[:java:enum Απαριθμήσεις ]]|
java/tostring.1455885085.txt.gz · Last modified: 2016/02/19 12:31 (external edit)