Sobes.tech
Junior

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

sobes.tech AI

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

Η μέθοδος θεωρείται υπερκαλυμμένη στις ακόλουθες περιπτώσεις:

  1. Έχει δηλωθεί σε μια υποκείμενη κλάση.
  2. Έχει το ίδιο όνομα με τη μέθοδο στην γονική κλάση.
  3. Έχει την ίδια υπογραφή (αριθμό και τύπους παραμέτρων) και σειρά παραμέτρων.
  4. Έχει τύπο επιστροφής συμβατό με τον τύπο επιστροφής της μεθόδου στην γονική κλάση (συμβατικότητα, αν ισχύει).
  5. Έχει τον ίδιο ή πιο ευρύ προσβάσιμο τροποποιητή από τη μέθοδο στην γονική κλάση (στα περισσότερα αντικειμενοστραφή γλώσσες).
  6. Η γονική μέθοδος δηλώνεται ως εικονική, αφηρημένη ή διεπαφή (σε γλώσσες που απαιτούν ρητή ένδειξη της δυνατότητας υπερκαλύψεως, π.χ. C# με τη λέξη-κλειδί virtual).

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

// Γονική κλάση
class SuperClass {
    // Μέθοδος που μπορεί να υπερκαλυφθεί
    public void display() {
        System.out.println("Αυτή είναι η μέθοδος display της SuperClass.");
    }
}

// Υποκείμενη κλάση
class SubClass extends SuperClass {
    // Υπερκαλυμμένη μέθοδος display
    @Override // Επισήμανση για έλεγχο υπερκαλύψεως κατά τη μεταγλώττιση
    public void display() {
        System.out.println("Αυτή είναι η μέθοδος display της SubClass.");
    }
}

Παράδειγμα σε Python:

# Γονική κλάση
class SuperClass:
    # Μέθοδος που μπορεί να υπερκαλυφθεί
    def display(self):
        print("Αυτή είναι η μέθοδος display της SuperClass.")

# Υποκείμενη κλάση
class SubClass(SuperClass):
    # Υπερκαλυμμένη μέθοδος display
    def display(self):
        print("Αυτή είναι η μέθοδος display της SubClass.")

Το κλειδί είναι να διατηρείται το όνομα και η υπογραφή της μεθόδου, αλλά να αλλάζει η συμπεριφορά της στην υποκείμενη κλάση.

Σημαντική διαφορά από το overloading:

Το overloading είναι η δήλωση πολλαπλών μεθόδων με το ίδιο όνομα σε μια κλάση, αλλά με διαφορετικές υπογραφές. Το overriding είναι η δήλωση μιας μεθόδου σε μια υποκείμενη κλάση με το ίδιο όνομα και υπογραφή με αυτή στην γονική κλάση.