Υπερκάλυψη (Overriding)

Με την υπερκάλυψη μπορούμε να έχουμε δύο μεθόδους με το ίδιο όνομα και υπογραφή (signature) αλλά με διαφορετική υλοποίηση.

Αυτό μπορεί να γίνει όταν μια υποκλάση (που κληρονομεί μια άλλη) χρησιμοποιεί το ίδιο όνομα μιας μεθόδου για να δηλώσει μια νέα υλοποίηση η οποία θα ισχύει για την υποκλάση.

class Animal:
  def move(self):
    print("Τα ζώα κινούνται")

class Dog(Animal): # κληρονομεί την Animal
  def move(self): # κάνει override την move της Animal
    print("Τα σκυλιά τρέχουν")

jack = Dog()
jack.move() # Τα σκυλιά τρέχουν

Μπορείτε να χρησιμοποιήσετε την super() για να καλέσετε την μέθοδο της υπερκλάσης.

Δείτε το παρακάτω παράδειγμα.

class Animal:
  def move(self):
    print("Τα ζώα κινούνται")

class Dog(Animal): # κληρονομεί την Animal
  def move(self): # κάνει override την move της Animal
    print("Τα σκυλιά τρέχουν")

jack = Dog()
jack.move() # Τα σκυλιά τρέχουν

super(Dog, jack).move() # Τα ζώα κινούνται