Sobes.tech
Junior

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

sobes.tech AI

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

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

Παραδείγματα χρήσης:

  • Αλλαγή της λογικής της κληρονομημένης συμπεριφοράς.
  • Παροχή μιας συγκεκριμένης υλοποίησης για μια κοινή διεπαφή στην υποκλάση.

Βασικά σημεία:

  • Απαιτείται σχέση είναι-ένα (κληρονομικότητα).
  • Η υπογραφή της μεθόδου πρέπει να ταιριάζει.
  • Ο τροποποιητής πρόσβασης μπορεί να είναι ο ίδιος ή λιγότερο αυστηρός από αυτόν της μητρικής μεθόδου.
  • Δεν μπορούν να υπερασπιστούν final ή static μέθοδοι (στις περισσότερες γλώσσες).
// Παράδειγμα σε Java
class Animal {
    public void makeSound() {
        System.out.println("Γενικός ήχος ζώου");
    }
}

class Dog extends Animal {
    @Override // Επισήμανση που δείχνει υπεράσπιση
    public void makeSound() {
        System.out.println("Γαβ!");
    }
}

// Χρήση
// Animal myAnimal = new Animal();
// myAnimal.makeSound(); // Έξοδος: Γενικός ήχος ζώου
//
// Animal myDog = new Dog();
// myDog.makeSound(); // Έξοδος: Γαβ! (καλείται η υπερασπισμένη μέθοδος)
# Παράδειγμα σε Python
class Animal:
    def make_sound(self):
        print("Γενικός ήχος ζώου")

class Dog(Animal):
    def make_sound(self): # Υπεράσπιση της μεθόδου
        print("Γαβ!")

# Χρήση
# animal = Animal()
# animal.make_sound() # Έξοδος: Γενικός ήχος ζώου
#
# dog = Dog()
# dog.make_sound() # Έξοδος: Γαβ!