Middle
Πότε συμβαίνει η υπεράσπιση μεθόδου (Overriding);
sobes.tech AI
Απάντηση από AI
Μέθοδος υπερισχύσεως στην αντικειμενοστραφή προγραμματισμό συμβαίνει όταν μια υποκλάση έχει μια μέθοδο με το ίδιο όνομα, υπογραφή (λίστα παραμέτρων) και τύπο επιστροφής με μια μέθοδο στην υπερκλάση της. Αυτό επιτρέπει στην υποκλάση να παρέχει τη δική της υλοποίηση της κληρονομημένης μεθόδου.
Κύριες προϋποθέσεις για την υπερισχύση:
- Κληρονομικότητα: Η υποκλάση πρέπει να κληρονομεί από την υπερκλάση.
- Υπογραφή μεθόδου: Η υπερισχυμένη μέθοδος στην υποκλάση πρέπει να έχει την ίδια υπογραφή (όνομα μεθόδου και λίστα τύπων παραμέτρων, η σειρά και ο αριθμός τους) με τη μέθοδο στην υπερκλάση. Σε ορισμένες γλώσσες (π.χ. Java), απαιτείται επίσης να ταιριάζει ο τύπος επιστροφής ή να είναι συναφής.
- Τροποποιητές πρόσβασης: Ο τροποποιητής πρόσβασης της υπερισχυμένης μεθόδου στην υποκλάση δεν μπορεί να είναι πιο περιοριστικός από αυτόν στην υπερκλάση.
- Δεν μπορεί να υπερισχύσει: Στατικές (
static), τελικές (finalσε Java,sealedσε C#) και ιδιωτικές (private) μέθοδοι δεν συμμετέχουν στην πολυμορφία μέσω κληρονομικότητας.
Παράδειγμα σε Java:
// Υπερκλάση
class Animal {
public void sound() {
// Προεπιλεγμένη υλοποίηση
System.out.println("Το ζώο κάνει έναν ήχο");
}
}
// Υποκλάση που υπερισχύει τη μέθοδο sound()
class Dog extends Animal {
@Override // Επισήμανση για έλεγχο από τον μεταγλωττιστή
public void sound() {
// Ειδική υλοποίηση για Dog
System.out.println("Ο σκύλος γαβγίζει");
}
}
class Main {
public static void main(String[] args) {
Animal τοΖώοΜου = new Animal();
Animal οΣκύλοςΜουΩςΖώο = new Dog(); // Πολυμορφισμός
Dog οΣκύλοςΜου = new Dog();
τοΖώοΜου.sound(); // Καλεί το sound() από το Animal
οΣκύλοςΜουΩςΖώο.sound(); // Καλεί το υπερισχυμένο sound() από το Dog (χάρη στον πολυμορφισμό)
οΣκύλοςΜου.sound(); // Καλεί το υπερισχυμένο sound() από το Dog
}
}
Παράδειγμα σε Python:
# Υπερκλάση
class Animal:
def sound(self):
# Προεπιλεγμένη υλοποίηση
print("Το ζώο κάνει έναν ήχο")
# Υποκλάση που υπερισχύει τη μέθοδο sound()
class Dog(Animal):
def sound(self):
# Ειδική υλοποίηση
print("Ο σκύλος γαβγίζει")
# Χρήση
το_ζώο = Animal()
ο_σκύλοςΜουΩςΖώο = Dog() # Πολυμορφισμός
ο_σκύλος = Dog()
το_ζώο.sound() # Καλεί το sound() από το Animal
ο_σκύλοςΜουΩςΖώο.sound() # Καλεί το υπερισχυμένο sound() από το Dog (χάρη στον πολυμορφισμό)
ο_σκύλος.sound() # Καλεί το υπερισχυμένο sound() από το Dog
Η υπερισχύση χρησιμοποιείται για την επίτευξη πολυμορφισμού κατά την εκτέλεση, επιτρέποντας την εκτέλεση διαφορετικών ενεργειών ανάλογα με τον πραγματικό τύπο του αντικειμένου, παρά την χρήση αναφοράς στην υπερκλάση. Αυτό αποτελεί βασική αρχή της αντικειμενοστραφούς προγραμματισμού για την κατασκευή ευέλικτων και επεκτάσιμων συστημάτων.