Middle
Millal toimub meetodi ülekirjutamine (Overriding)?
sobes.tech AI
Vastus AI-lt
Meetodi ülekirjutamine (Overriding) objektorienteeritud programmeerimises toimub siis, kui alamklassil on meetod sama nime, parameetrite loend (või signatuur) ja tagastustüüp nagu sellel pärilikus klassil. See võimaldab alamklassil pakkuda oma versiooni pärandatud meetodist.
Peamised tingimused ülekirjutamiseks:
- Pärimine: Alamklass peab pärima vanemklassist.
- Meetodi signatuur: Ülekirjutataval meetodil alamklassis peab olema sama signatuur (meetodi nimi ja parameetritüüpide loend, nende järjekord ja arv) nagu vanemklassi meetodil. Mõnedes keeltes (näiteks Java) on samuti nõutav tagastustüübi kokkulangevus või kovariantsus.
- Juurdepääsuklassifikaatorid: Ülekirjutatud meetodi juurdepääsuklassifikaator alamklassis ei tohi olla rangem kui vanemklassi meetodil.
- Ei saa ülekirjutada: Statilisi (
static), final(finalJava's,sealedC#-s) ja privaatsed (private`) meetodeid, kuna need ei osale polümorfismis päriluse kaudu.
Näide Java-s:
// Vanemklass
class Animal {
public void sound() {
// Vaikimisi rakendus
System.out.println("Loom teeb häält");
}
}
// Alamklass, mis ülekirjutab meetodi sound()
class Dog extends Animal {
@Override // Anotatsioon kompilaatorile kontrollimiseks
public void sound() {
// Spetsiifiline rakendus Dog jaoks
System.out.println("Koer haukub");
}
}
class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myDogAsAnimal = new Dog(); // Polümorfism
Dog myDog = new Dog();
myAnimal.sound(); // Kutsub välja sound() vanemklassist
myDogAsAnimal.sound(); // Kutsub välja ülekirjutatud sound() Dog-st (tänu polümorfismile)
myDog.sound(); // Kutsub välja ülekirjutatud sound() Dog-st
}
}
Python näide:
# Vanemklass
class Animal:
def sound(self):
# Vaikimisi rakendus
print("Loom teeb häält")
# Alamklass, mis ülekirjutab meetodi sound()
class Dog(Animal):
def sound(self):
# Spetsiifiline rakendus Dog jaoks
print("Koer haukub")
# Kasutamine
my_animal = Animal()
my_dog_as_animal = Dog() # Polümorfism
my_dog = Dog()
my_animal.sound() # Kutsub välja sound() vanemklassist
my_dog_as_animal.sound() # Kutsub välja ülekirjutatud sound() Dog-st (tänu polümorfismile)
my_dog.sound() # Kutsub välja ülekirjutatud sound() Dog-st
Ülekirjutamine kasutatakse jooksva aja polümorfismi saavutamiseks, võimaldades teha erinevaid tegevusi sõltuvalt objekti tegelikust tüübist, hoolimata sellest, et kasutame viidet vanemklassile. See on OOP-i üks põhiprintsiipe, mis võimaldab luua paindlikke ja laiendatavaid süsteeme.