Middle
Երբ է տեղի ունենում մեթոդի վերագրում (Overriding):
sobes.tech AI
Պատասխան AI-ից
Մեթոդի վերագրում (Overriding) օբյեկտային-կողմնորոշված ծրագրավորման մեջ տեղի է ունենում, երբ ենթակլասը ունի նույն անունով, նույն պարամետրերի ցանկով (կամ սիգնատուրայով) և նույն վերադարձվող տիպով մեթոդ, ինչ նրա ծնողական դասում։ Սա թույլ է տալիս ենթակլասին տրամադրել իր սեփական իրականացմանը ժառանգած մեթոդի համար։
Հիմնական պայմանները վերագրելու համար՝
- Ներառում: Սուբքլասը պետք է ժառանգի ծնողական դասից։
- Մեթոդի սիգնատուրա: Վերագրող մեթոդը ենթակլասում պետք է ունենա նույն սիգնատուրան (մեթոդի անունը և պարամետրերի տիպերի ցանկը, նրանց կարգը և քանակը), ինչ ծնողական դասում։ Որոշ լեզուներում (օրինակ, Java) նաև պահանջվում է վերադարձվող տիպի համապատասխանությունը կամ կովարիանտությունը։
- Մուտքի մոդիֆիկատորներ: Վերագրող մեթոդի մուտքի մոդիֆիկատորը չի կարող լինել ավելի սահմանափակ, քան ծնողական դասում։
- Չի կարելի վերագրել: Ստատիկ (
static), վերջնական (finalJava- ում,sealedC#- ում) և մասնավոր (private) մեթոդները, քանի որ նրանք չեն մասնակցում պոլիմորֆիզմին ժառանգության միջոցով։
Օրինակ Java- ում՝
// Ծնողական դաս
class Animal {
public void sound() {
// Դյուրակիր իրականացում
System.out.println("Համայն կենդանին հանում է ձայն");
}
}
// Սուբքլաս, որը վերագրում է sound() մեթոդը
class Dog extends Animal {
@Override // Անոտացիա կոմպիլյատորին ստուգելու համար
public void sound() {
// Մասնավոր իրականացում Dog- ի համար
System.out.println("Կենդանին հաչում է");
}
}
class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myDogAsAnimal = new Dog(); // Պոլիմորֆիզմ
Dog myDog = new Dog();
myAnimal.sound(); // Զանգում է sound() ից Animal
myDogAsAnimal.sound(); // Զանգում է վերագրած sound() ից Dog (շնորհիվ պոլիմորֆիզմի)
myDog.sound(); // Զանգում է վերագրած sound() ից Dog
}
}
Python- ում՝
# Ծնողական դաս
class Animal:
def sound(self):
# Դյուրակիր իրականացում
print("Համայն կենդանին հանում է ձայն")
# Սուբքլաս, որը վերագրում է sound() մեթոդը
class Dog(Animal):
def sound(self):
# Մասնավոր իրականացում Dog- ի համար
print("Կենդանին հաչում է")
# Օգտագործում
my_animal = Animal()
my_dog_as_animal = Dog() # Պոլիմորֆիզմ
my_dog = Dog()
my_animal.sound() # Զանգում է sound() ից Animal
my_dog_as_animal.sound() # Զանգում է վերագրած sound() ից Dog (շնորհիվ պոլիմորֆիզմի)
my_dog.sound() # Զանգում է վերագրած sound() ից Dog
Վերագրումը օգտագործվում է ժամանակի ռնգեղական պոլիմորֆիզմի հասնելու համար, թույլ տալով տարբեր գործողություններ կատարել կախված իրական օբյեկտի տիպից, չնայած մենք օգտագործում ենք հղում ծնողական դասին։ Սա հիմնական սկզբունքն է OOP-ի համար՝ ստեղծելու ճկուն և ընդարձակվող համակարգեր։