Junior
Mis on ülekirjutamine (Overriding) programmeerimises?
sobes.tech AI
Vastus AI-lt
Pārklāšana (Overriding) ir iespēja apakšklasei sniegt savu īstenojumu jau definētam metodei, kas ir tās vecāku klasē. Pārklājamās metodes (vārds, parametru skaits un tipi) paraksts apakšklasē ir pilnībā jāatbilst vecāku klases metodes parakstam. Atgriešanas tips arī ir jābūt vai nu tam pašam, vai kovariantam (pavaldnieka tipam) vecāku metodes atgriešanas tipam.
Galvenie aspekti:
- Mantošana: Pārklāšana ir iespējama tikai mantošanas attiecībās, kur apakšklase manto metodi no vecāku klases.
- Polimorfisms: Pārklāšana ir viens no izpildes laika polimorfisma mehānismiem. Tas nozīmē, ka atkarībā no faktiskā objekta tipa, kas tiek izsaukts caur vecāku tipa saiti, tiks izpildīta atbilstošā metode (no vecāku vai apakšklases).
@Overrideatslēgvārds: Dažās valodās (piemēram, Java) tiek izmantota anotācija@Override. Tā nav obligāta pareizai pārklāšanai, bet ieteicama koda lasāmības uzlabošanai un kompilācijas kļūdu novēršanai, ja metode neatbilst pārklāšanas noteikumiem.- Piekļuve vecāku metodei: Pārklājamās metodes iekšpusē bieži ir nepieciešams izsaukt to pašu metodes realizāciju no vecāku klases. Tam tiek izmantots atslēgvārds
super(piemēram,super.metode()).
Java piemērs:
// Vecāku klase
class Animal {
// Metode vecāku klasē
void makeSound() {
System.out.println("Dzīvnieks izdod skaņu");
}
}
// Apakšklase, kas manto no Animal
class Dog extends Animal {
// `makeSound()` metodes pārklāšana
@Override
void makeSound() {
System.out.println("Vau vau!");
}
// Piemērs, kā izsaukt vecāku metodi
void eat() {
System.out.println(" suns ēd.");
super.makeSound(); // izsauc vecāku klases metodi
}
}
class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myDog = new Dog(); // polimorfisms
myAnimal.makeSound(); // izvadīs: Dzīvnieks izdod skaņu
myDog.makeSound(); // izvadīs: Vau vau! (pārklātais metodes realizācija)
Dog specificDog = new Dog();
specificDog.eat(); // izvadīs: suns ēd.
// Vau vau! (vecāku metodes izsaukums)
}
}
Python piemērs:
# Vecāku klase
class Animal:
# Metode vecāku klasē
def make_sound(self):
print("Dzīvnieks izdod skaņu")
# Apakšklase, kas manto no Animal
class Dog(Animal):
# `make_sound()` metodes pārklāšana
def make_sound(self):
print("Vau vau!")
# Piemērs, kā izsaukt vecāku metodi
def eat(self):
print(" suns ēd.")
super().make_sound() # izsauc vecāku klases metodi
# Demonstrācija
my_animal = Animal()
my_dog = Dog() # polimorfisms
my_animal.make_sound() # izvadīs: Dzīvnieks izdod skaņu
my_dog.make_sound() # izvadīs: Vau vau!
specific_dog = Dog()
specific_dog.eat() # izvadīs: suns ēd.
# Vau vau! (vecāku metodes izsaukums)