Middle
Kad notiek metodes pārrakstīšana (Overriding)?
sobes.tech AI
Atbilde no AI
Metodes pārrakstīšana (Overriding) objektorientētajā programmēšanā notiek, kad apakšklasei ir metode ar tādu pašu nosaukumu, parametru sarakstu (vai signatūru) un atgriešanas tipu kā tās vecākajā klasē. Tas ļauj apakšklasei sniegt savu īstenojumu mantojamai metodei.
Galvenie nosacījumi pārrakstīšanai:
- Mantošana: Apakšklasei jābūt mantojumam no vecākās klases.
- Metodes signatūra: Pārrakstītajai metodei apakšklasē jābūt tādai pašai signatūrai (metodes nosaukums un parametru tipu saraksts, to kārtība un skaits), kā vecākās klases metodē. Dažās valodās (piemēram, Java) ir nepieciešama arī atgriešanas tipa saskaņošana vai kovariantība.
- Piekļuves modifikatori: Pārrakstītās metodes piekļuves modifikators apakšklasē nedrīkst būt stingrāks nekā vecākās klases metodē.
- Nav iespējams pārrakstīt: Statiskās (
static), galīgās (finalJava,sealedC#) un privātās (private) metodes, jo tās nepiedalās polimorfismā caur mantošanu.
Piemērs Java:
// Vecākās klases
class Animal {
public void sound() {
// Noklusējuma īstenojums
System.out.println("Dzīvnieks izdala skaņu");
}
}
// Apakšklase, kas pārraksta metodi sound()
class Dog extends Animal {
@Override // Anotācija pārbaudei kompilatorā
public void sound() {
// Īpašs īstenojums Dog
System.out.println(" suns rej");
}
}
class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myDogAsAnimal = new Dog(); // Polimorfisms
Dog myDog = new Dog();
myAnimal.sound(); // Izsauc sound() no Animal
myDogAsAnimal.sound(); // Izsauc pārrakstīto sound() no Dog (pateicoties polimorfismam)
myDog.sound(); // Izsauc pārrakstīto sound() no Dog
}
}
Piemērs Python:
# Vecākās klases
class Animal:
def sound(self):
# Noklusējuma īstenojums
print("Dzīvnieks izdala skaņu")
# Apakšklase, kas pārraksta metodi sound()
class Dog(Animal):
def sound(self):
# Īpašs īstenojums Dog
print(" suns rej")
# Lietošana
my_animal = Animal()
my_dog_as_animal = Dog() # Polimorfisms
my_dog = Dog()
my_animal.sound() # Izsauc sound() no Animal
my_dog_as_animal.sound(); # Izsauc pārrakstīto sound() no Dog (pateicoties polimorfismam)
my_dog.sound(); # Izsauc pārrakstīto sound() no Dog
Pārrakstīšana tiek izmantota, lai sasniegtu izpildes laikā polimorfismu, ļaujot veikt dažādas darbības atkarībā no objekta faktiskā tipa, neskatoties uz to, ka izmantojam atsauci uz vecāku klasi. Šis ir galvenais OOP princips, lai veidotu elastīgas un paplašināmas sistēmas.