Sobes.tech
Junior

Τι είναι η μετατροπή τύπου (casting) στη Java;

sobes.tech AI

Απάντηση από AI

Η μετατροπή τύπων (casting) στη Java είναι η μετατροπή της τιμής ενός τύπου δεδομένων σε έναν άλλο τύπο δεδομένων.

Τύποι μετατροπής:

  • Explicit Casting (Ραφινάτο): Πραγματοποιείται από τον προγραμματιστή χρησιμοποιώντας τον τελεστή (τύπος). Χρησιμοποιείται για μετατροπή από "μεγαλύτερο" τύπο σε "μικρότερο" (π.χ., από double σε int). Μπορεί να οδηγήσει σε απώλεια δεδομένων.
    // αυτόματη μετατροπή (implicit)
    int a = 10;
    double b = a; // int σε double
    
    // ρητή μετατροπή (explicit)
    double c = 10.5;
    int d = (int) c; // double σε int, d θα είναι 10
    
  • Implicit Casting (Αυτόματη Μετατροπή / Widening Conversion): Πραγματοποιείται αυτόματα από το JVM όταν μετατρέπουμε από "μικρότερο" σε "μεγαλύτερο" τύπο (π.χ., από int σε double). Είναι ασφαλές και δεν προκαλεί απώλεια δεδομένων.
    int x = 10;
    double y = x; // int αυτόματα σε double
    

Η μετατροπή τύπων μπορεί να συμβεί μεταξύ primitive τύπων ή μεταξύ αντικειμενικών τύπων σε μια ιεραρχία κληρονομικότητας.

Για μετατροπή αντικειμενικών τύπων:

  • Upcasting: Μετατροπή μιας υποκλάσης στη superκλάση της. Είναι έμμεση και ασφαλής.
    class Animal {}
    class Dog extends Animal {}
    
    Animal animal = new Dog(); // Upcasting
    
  • Downcasting: Μετατροπή μιας superκλάσης σε υποκλάση. Απαιτεί ρητή μετατροπή και μπορεί να προκαλέσει ClassCastException κατά την εκτέλεση, αν το αντικείμενο δεν είναι πραγματικά μια περίπτωση της στόχευσης υποκλάσης.
    Animal animal = new Dog(); // Upcasting
    
    // Downcasting - απαιτεί ρητή μετατροπή και έλεγχο με instanceof
    if (animal instanceof Dog) {
        Dog dog = (Dog) animal;
        // Τώρα μπορεί να χρησιμοποιήσει μεθόδους που είναι συγκεκριμένες για το Dog
    }