Sobes.tech
Junior

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

sobes.tech AI

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

მეთოდი ითვლება გადაწერილად, როდესაც შვილს კლასში გამოაცხადებს მეთოდს იგივე სიგნატურით (მეთოდის სახელი, პარამეტრების რაოდენობა და ტიპები იგივე წესრიგში), როგორც მშობლის კლასში. გარდა ამისა:

  1. მშობლის კლასში მეთოდი არ უნდა იყოს გამოცხადებული final (ან თანაბარი მოდიფიკატორი სხვა ენებში), რაც აკრძალავს გადაწერას.
  2. გადაწერილი მეთოდის წვდომის დონე შვილს კლასში არ უნდა იყოს უფრო შეზღუდული ვიდრე მშობლის კლასში.
  3. გადაწერილი მეთოდი შეიძლება დაბრუნდეს იგივე ტიპი, რაც მშობლის კლასში, ან კოვარიანტური ტიპი (სუბტიპი ორიგინალური ტიპის).
  4. გადაწერილი მეთოდი არ უნდა ისროლოს უფრო ზოგად (ან შეუთავსებელ) გამონაკლისებს, ვიდრე მშობლის მეთოდის მითითებული.
  5. სტატიკური მეთოდები ვერ იქნება გადაწერილი, მხოლოდ დამალული (hidden).

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

// Java მაგალითი

class Parent {
    public void display() { // მშობლის კლასში მეთოდი
        System.out.println("Parent display");
    }

    // final void cannotOverride() { ... } // ამ მეთოდს ვერ გადაწერ
}

class Child extends Parent {
    @Override // @Override ანოტაცია ეხმარება კომპილატორს გადაამოწმოს, რომ მეთოდი ნამდვილად გადაწერილია
    public void display() { // გადაწერილი მეთოდი - იგივე სიგნატურა
        System.out.println("Child display");
    }
}