Sobes.tech
Junior

Πότε θεωρείται ότι μια μέθοδος έχει υπερισχύσει (overriding);

sobes.tech AI

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

Μια μέθοδος θεωρείται υπερκαλυμμένη όταν σε μια υποκλάση δηλώνεται μια μέθοδος με την ίδια υπογραφή (όνομα μεθόδου, αριθμός και τύποι παραμέτρων με την ίδια σειρά) με αυτήν στη γονική κλάση. Επιπλέον:

  1. Η μέθοδος στη γονική κλάση δεν πρέπει να δηλώνεται ως final (ή ισοδύναμος τροποποιητής σε άλλες γλώσσες), που εμποδίζει την υπερκάλυψη.
  2. Το επίπεδο πρόσβασης της υπερκαλυμμένης μεθόδου στην υποκλάση δεν μπορεί να είναι πιο περιοριστικό από αυτό της μεθόδου στη γονική κλάση.
  3. Η υπερκαλυμμένη μέθοδος μπορεί να επιστρέφει τον ίδιο τύπο με αυτήν στη γονική κλάση ή έναν συναρμοστικό τύπο (υποτύπο του αρχικού τύπου).
  4. Η υπερκαλυμμένη μέθοδος δεν μπορεί να ρίξει εξαιρέσεις που είναι πιο γενικές (ή ασυμβίβαστες) από αυτές που δηλώνονται στη μέθοδο της γονικής κλάσης.
  5. Οι στατικές μέθοδοι δεν μπορούν να υπερκαλυφθούν, μόνο να κρυφτούν (hidden).

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

// Παράδειγμα σε Java

class Parent {
    public void display() { // Μέθοδος στη γονική κλάση
        System.out.println("Parent display");
    }

    // final void cannotOverride() { ... } // Αυτή η μέθοδος δεν μπορεί να υπερκαλυφθεί
}

class Child extends Parent {
    @Override // Η σημείωση @Override βοηθά τον μεταγλωττιστή να ελέγξει ότι η μέθοδος υπερκαλύπτεται πραγματικά
    public void display() { // Υπερκαλυμμένη μέθοδος - ίδια υπογραφή
        System.out.println("Child display");
    }
}