Junior
Šta je prepisivanje (Overriding) u programiranju?
sobes.tech АИ
Одговор од АИ
Prepisivanje metode (Overriding) je mogućnost podklase da pruži sopstvenu implementaciju metode koja je već definisana u njenoj roditeljskoj klasi. Potpis metode koja se prepisuje (ime, broj i tipovi parametara) u podklasi mora potpuno odgovarati potpisu metode u roditeljskoj klasi. Tip povratne vrednosti takođe mora biti ili isti ili kovarijantan (podtip) tipa povratne vrednosti metode u roditelju.
Glavni aspekti prepisivanja:
- Nasleđivanje: Prepisivanje je moguće samo u okviru odnosa nasleđivanja, gde podklasa nasleđuje metodu od superklase.
- Polimorfizam: Prepisivanje je jedan od mehanizama implementacije polimorfizma u vreme izvršenja (runtime polymorphism). To znači da će, u zavisnosti od stvarnog tipa objekta, koji se poziva putem reference na tip roditelja, biti izvršena odgovarajuća implementacija metode (ili iz roditelja ili iz podklase).
- Ključna reč
@Override: U nekim jezicima (npr. Java) koristi se anotacija@Override. Ona nije obavezna za ispravno funkcionisanje prepisivanja, ali se preporučuje radi poboljšanja čitljivosti koda i sprečavanja grešaka pri kompilaciji, ako metoda ne odgovara pravilima prepisivanja. - Pristup roditeljskoj metodi: Unutar prepisane metode podklase često je potrebno pozvati implementaciju iste metode iz roditeljske klase. Za to se koristi ključna reč
super(npr.super.metod()).
Primer u Javi:
// Roditeljska klasa
class Animal {
// Metoda u roditeljskoj klasi
void makeSound() {
System.out.println("Životinja pravi zvuk");
}
}
// Podklasa koja nasleđuje od Animal
class Dog extends Animal {
// Prepisivanje metode makeSound()
@Override
void makeSound() {
System.out.println("Vau vau!");
}
// Primer poziva roditeljske metode
void eat() {
System.out.println("Pas jede.");
super.makeSound(); // Pozivanje metode iz roditeljske klase
}
}
class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myDog = new Dog(); // Polimorfizam
myAnimal.makeSound(); // Ispisaće: Životinja pravi zvuk
myDog.makeSound(); // Ispisaće: Vau vau! (Prepisana metoda)
Dog specificDog = new Dog();
specificDog.eat(); // Ispisaće: Pas jede.
// Životinja pravi zvuk
}
}
Primer u Pythonu:
# Roditeljska klasa
class Animal:
# Metoda u roditeljskoj klasi
def make_sound(self):
print("Životinja pravi zvuk")
# Podklasa koja nasleđuje od Animal
class Dog(Animal):
# Prepisivanje metode make_sound()
def make_sound(self):
print("Vau vau!")
# Primer poziva roditeljske metode
def eat(self):
print("Pas jede.")
super().make_sound() # Pozivanje metode iz roditeljske klase
# Demonstracija
my_animal = Animal()
my_dog = Dog() # Polimorfizam
my_animal.make_sound() # Ispisaće: Životinja pravi zvuk
my_dog.make_sound() # Ispisaće: Vau vau!
specific_dog = Dog()
specific_dog.eat() # Ispisaće: Pas jede.
# Životinja pravi zvuk
Prepisivanje se koristi za prilagođavanje ponašanja osnovne klase specifičnostima podklase, uz zadržavanje općeg sučelja. To je ključni element objektno-orijentiranog dizajna.