Sobes.tech
Middle

Երբ է տեղի ունենում մեթոդի վերագրում (Overriding):

sobes.tech AI

Պատասխան AI-ից

Մեթոդի վերագրում (Overriding) օբյեկտային-կողմնորոշված ծրագրավորման մեջ տեղի է ունենում, երբ ենթակլասը ունի նույն անունով, նույն պարամետրերի ցանկով (կամ սիգնատուրայով) և նույն վերադարձվող տիպով մեթոդ, ինչ նրա ծնողական դասում։ Սա թույլ է տալիս ենթակլասին տրամադրել իր սեփական իրականացմանը ժառանգած մեթոդի համար։

Հիմնական պայմանները վերագրելու համար՝

  • Ներառում: Սուբքլասը պետք է ժառանգի ծնողական դասից։
  • Մեթոդի սիգնատուրա: Վերագրող մեթոդը ենթակլասում պետք է ունենա նույն սիգնատուրան (մեթոդի անունը և պարամետրերի տիպերի ցանկը, նրանց կարգը և քանակը), ինչ ծնողական դասում։ Որոշ լեզուներում (օրինակ, Java) նաև պահանջվում է վերադարձվող տիպի համապատասխանությունը կամ կովարիանտությունը։
  • Մուտքի մոդիֆիկատորներ: Վերագրող մեթոդի մուտքի մոդիֆիկատորը չի կարող լինել ավելի սահմանափակ, քան ծնողական դասում։
  • Չի կարելի վերագրել: Ստատիկ (static), վերջնական (final Java- ում, sealed C#- ում) և մասնավոր (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-ի համար՝ ստեղծելու ճկուն և ընդարձակվող համակարգեր։