Sobes.tech
Junior

Πότε συμβαίνει η υπερχείλιση μιας μεθόδου (overriding);

sobes.tech AI

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

Η υπεράσπιση μεθόδου (overriding) συμβαίνει στην ιεραρχία κληρονόμησης όταν μια υποκλάση παρέχει τη δική της υλοποίηση μιας μεθόδου που ήδη ορίζεται στην υπερκλάση με το ίδιο όνομα, υπογραφή (ταύτιση τύπου και αριθμού παραμέτρων) και τύπο επιστροφής (ή κατηγορία covariant στην περίπτωση του τύπου επιστροφής αντικειμένου).

Βασικά χαρακτηριστικά:

  • Κληρονομικότητα: Η υπεράσπιση είναι δυνατή μόνο στο πλαίσιο της κληρονομικότητας (υπερκλάσεις και υποκλάσεις).
  • Υπογραφή: Η μέθοδος στην υποκλάση πρέπει να έχει την ίδια υπογραφή (όνομα, αριθμό και τύπους παραμέτρων) και τον ίδιο τύπο επιστροφής (ή τον covariant υποτύπο του) με τη μέθοδο στην υπερκλάση.
  • Προσβασιμότητα: Η μέθοδος που υπερασπίζεται πρέπει να είναι προσβάσιμη στην υποκλάση (συνήθως public, protected).
  • Πολυμορφισμός: Η υπεράσπιση αποτελεί τη βάση του χρόνου εκτέλεσης πολυμορφισμού, επιτρέποντας στα αντικείμενα της υποκλάσης να ανταποκρίνονται στην κλήση της μεθόδου με τον δικό τους τρόπο, ακόμη και αν αναφέρονται μέσω αναφοράς στην υπερκλάση.

Παράδειγμα (Java):

// Υπερκλάση
class Animal {
    // Μέθοδος που θα υπερασπιστεί
    public void makeSound() {
        System.out.println("Το ζώο κάνει έναν ήχο");
    }
}

// Υποκλάση
class Dog extends Animal {
    // Υπεράσπιση της μεθόδου makeSound()
    @Override // Η σημείωση @Override είναι προαιρετική, αλλά συνιστάται
    public void makeSound() {
        System.out.println("Ο σκύλος γαβγίζει");
    }
}

Παράδειγμα χρήσης:

// Δημιουργία αντικειμένου Dog
Animal myDog = new Dog();
// Κλήση της μεθόδου. Θα κληθεί η υπερασπισμένη έκδοση από το Dog
myDog.makeSound(); // Έξοδος: Ο σκύλος γαβγίζει

// Δημιουργία αντικειμένου Animal
Animal someAnimal = new Animal();
// Κλήση της μεθόδου. Θα κληθεί η έκδοση από το Animal
someAnimal.makeSound(); // Έξοδος: Το ζώο κάνει έναν ήχο