Sobes.tech
Junior — Middle

Πώς διαφέρουν η στατική και η δυναμική σύνδεση μεθόδων στη Java και ποια είναι τα χαρακτηριστικά τους;

sobes.tech AI

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

Στην Java, η στατική και η δυναμική δέσμευση των μεθόδων διαφέρουν ως προς το πότε γίνεται η επιλογή της συγκεκριμένης υλοποίησης της μεθόδου για την κλήση.

  • Στατική δέσμευση (static binding) συμβαίνει κατά τη διάρκεια της μεταγλώττισης. Περιλαμβάνει κλήσεις σε στατικές μεθόδους, ιδιωτικές και τελικές μεθόδους. Ο μεταγλωττιστής γνωρίζει ποια μέθοδο να καλέσει και συνδέει την κλήση με μια συγκεκριμένη υλοποίηση.

  • Δυναμική δέσμευση (dynamic binding) συμβαίνει κατά την εκτέλεση του προγράμματος. Είναι χαρακτηριστική των εικονικών μεθόδων (κανονικών μεθόδων στιγμιότυπου), που μπορούν να υπερισχύσουν σε υποκλάσεις. Η JVM, κατά την εκτέλεση, καθορίζει ποια μέθοδο θα καλέσει, βάσει του πραγματικού τύπου του αντικειμένου.

Παράδειγμα:

class Animal {
    void sound() {
        System.out.println("Κάποιος ήχος");
    }
    static void staticMethod() {
        System.out.println("Στατική μέθοδος σε Animal");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("Γαύγισμα");
    }
    static void staticMethod() {
        System.out.println("Στατική μέθοδος σε Dog");
    }
}

public class Test {
    public static void main(String[] args) {
        Animal a = new Dog();
        a.sound(); // δυναμική δέσμευση, θα καλέσει Dog.sound()
        a.staticMethod(); // στατική δέσμευση, θα καλέσει Animal.staticMethod()
    }
}

Συνοπτικά, η δυναμική δέσμευση παρέχει πολυμορφισμό, ενώ η στατική προσφέρει ταχύτερη και πιο προβλέψιμη λειτουργία για τις μεθόδους που δεν μπορούν να υπερισχύσουν.