User Tools

Site Tools


java:type_casting

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
java:type_casting [2021/03/05 16:00]
gthanos
java:type_casting [2021/04/05 15:09] (current)
Line 7: Line 7:
 </code> </code>
  
-Από την παραπάνω δήλωση η μεταβλητή ''r1'' είναι τύπου ''Rectangle''. Επειδή όμως ο τύπος ''Rectangle'' κληρονομεί την κλάση ''BasicRectangle'' **__η μεταβλητή r1 είναι και τύπου BasicRectangle**. Επομένως, θα μπορούσαμε να γράψουμε+Από την παραπάνω δήλωση η μεταβλητή ''r1'' είναι τύπου ''Rectangle''. Επειδή όμως ο τύπος ''Rectangle'' κληρονομεί την κλάση ''BasicRectangle'' **η μεταβλητή r1 είναι και τύπου BasicRectangle**. Επομένως, θα μπορούσαμε να γράψουμε
  
 <code java> <code java>
Line 16: Line 16:
  
 Την παραπάνω ανάθεση την ονομάζουμε άρρητη μετατροπή (//implicit casting//) διότι αναθέτουμε ένα αντικείμενο του κληρονομούμενου τύπου δεδομένων (''r1'') σε μία μεταβλητή του γονικού τύπου (''r2''), χωρίς να ορίζουμε κάποια μετατροπή τύπου. Την παραπάνω ανάθεση την ονομάζουμε άρρητη μετατροπή (//implicit casting//) διότι αναθέτουμε ένα αντικείμενο του κληρονομούμενου τύπου δεδομένων (''r1'') σε μία μεταβλητή του γονικού τύπου (''r2''), χωρίς να ορίζουμε κάποια μετατροπή τύπου.
 +
 +Αν θέλουμε να ζωγραφίσουμε τον κώδικα του προηγούμενου παραδείγματος μπορούμε να το κάνουμε όπως στο παρακάτω σχήμα. Παρατηρήστε ότι η μεταβλητές **r1** και **r2** δείχνουν στο ίδιο αντικείμενο. Η διαφορά είναι ότι η **r2** αν και δείχνει σε ένα αντικείμενο τύπου **Rectangle**, έχει πρόσβαση μόνο στο τμήμα του αντικειμένου που είναι του τύπου **BasicRectangle**. Ο λόγος για αυτόν τον περιορισμό είναι ότι λόγω του τύπου της ο //compiler// υποθέτει ότι δείχνει σε ένα αντικείμενο τύπου **BasicRectangle** με αποτέλεσμα να μην επιτρέπει την πρόσβαση στα πεδία και τις μεθόδους που δεν ανήκουν στην κλάση **BasicRectangle**, αλλά στην υποκλάση.
 +
 +{{  :java:implicit-casting.png  |}}
 +
 +=== Ρητή μετατροπή ===
  
 Ας δοκιμάσουμε το ανάποδο παράδειγμα τώρα Ας δοκιμάσουμε το ανάποδο παράδειγμα τώρα
  
 <code java> <code java>
-BasicRectangle r3 = new BasicRectangle(100,200);+BasicRectangle r3 = new Rectangle(100,200,5,-5);
 Rectangle r4 = r3; Rectangle r4 = r3;
 </code> </code>
Line 27: Line 33:
  
 <code java> <code java>
-BasicRectangle r3 = new BasicRectangle(100,200); +BasicRectangle r3 = new Rectangle(100,200,5,-5); 
-Rectangle r4 = (BasicRectangle)r3;+Rectangle r4 = (Rectangle)r3;
 </code> </code>
  
Line 36: Line 42:
  
 <code java> <code java>
-BasicRectangle r3 = new BasicRectangle(100,200); +BasicRectangle r3 = new Rectangle(100,200,5,-5); 
-Rectangle r4 = null;+Rectangle r4;
 if (r3 instanceof Rectangle) { if (r3 instanceof Rectangle) {
     r4 = (Rectangle)r3;     r4 = (Rectangle)r3;
java/type_casting.1614960010.txt.gz · Last modified: 2021/03/05 16:00 by gthanos