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() # Έξοδος: Γαβ!