Sobes.tech
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,sealed C#-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.