Sobes.tech
Junior

როდის ხდება მეთოდის გადაფარვა (overriding)?

sobes.tech AI

პასუხი AI-სგან

მეთოდის გადაფარვა (overriding) ხდება მემკვიდრეობის ჰიერქიაში, როდესაც შვილობილი კლასი უზრუნველყოფს თავის რეალიზაციას მეთოდის, რომელიც უკვე განსაზღვრულია მშობელ კლასში იმავე სახელით, სიგნატურით (პარამეტრების ტიპისა და რაოდენობის შესაბამისობით) და დაბრუნების ტიპით (ან კოვარიანტული შემთხვევაში დაბრუნების ტიპის ობიექტით).

ძირითადი მახასიათებლები:

  • მემკვიდრეობა: გადაფარვა შესაძლებელია მხოლოდ მემკვიდრეობის კონტექსტში (მშობელი და შვილი კლასი).
  • სიგნატურა: შვილის კლასში მეთოდი უნდა ჰქონდეს იგივე სიგნატურა (სახელი, პარამეტრების რაოდენობა და ტიპები) და დაბრუნების ტიპი (ან მისი კოვარიანტული ტიპი), როგორც მშობელ კლასში.
  • ხელმისაწვდომობა: გადაფარებული მეთოდი უნდა იყოს ხელმისაწვდომი შვილის კლასისთვის (საშუალოდ public, protected).
  • პოლიმორფიზმი: გადაფარვა წარმოადგენს დროის შესრულების პოლიმორფიზმის საფუძველს (runtime polymorphism), რაც საშუალებას აძლევს შვილის კლასის ობიექტებს რეაგირება მოახდინონ მეთოდის გამოძახებაზე თავისებურად, მიუხედავად იმისა, რომ მათ მიმართავენ მშობელ კლასის მითითებით.

მაგალითი (Java):

// მშობელი კლასი
class Animal {
    // მეთოდი, რომელიც გადაფარება მოხდება
    public void makeSound() {
        System.out.println("Animal makes a sound");
    }
}

// შვილი კლასი
class Dog extends Animal {
    // makeSound() მეთოდის გადაფარვა
    @Override // @Override ანოტაცია აუცილებელი არაა, მაგრამ რეკომენდირებულია
    public void makeSound() {
        System.out.println("Dog barks");
    }
}

გამოყენების მაგალითი:

// ქმნით Dog ობიექტს
Animal myDog = new Dog();
// ვიძახით მეთოდს. გამოძახებული იქნება გადაფარული ვერსია Dog-დან
myDog.makeSound(); // შედეგი: Dog barks

// ქმნით Animal ობიექტს
Animal someAnimal = new Animal();
// ვიძახით მეთოდს. გამოძახებული იქნება Animal-ის ვერსია
someAnimal.makeSound(); // შედეგი: Animal makes a sound