Junior
როდის ითვლება მეთოდი გადაფარვად (overriding)?
sobes.tech AI
პასუხი AI-სგან
მეთოდი ითვლება გადაწერილად, როდესაც შვილს კლასში გამოაცხადებს მეთოდს იგივე სიგნატურით (მეთოდის სახელი, პარამეტრების რაოდენობა და ტიპები იგივე წესრიგში), როგორც მშობლის კლასში. გარდა ამისა:
- მშობლის კლასში მეთოდი არ უნდა იყოს გამოცხადებული
final(ან თანაბარი მოდიფიკატორი სხვა ენებში), რაც აკრძალავს გადაწერას. - გადაწერილი მეთოდის წვდომის დონე შვილს კლასში არ უნდა იყოს უფრო შეზღუდული ვიდრე მშობლის კლასში.
- გადაწერილი მეთოდი შეიძლება დაბრუნდეს იგივე ტიპი, რაც მშობლის კლასში, ან კოვარიანტური ტიპი (სუბტიპი ორიგინალური ტიპის).
- გადაწერილი მეთოდი არ უნდა ისროლოს უფრო ზოგად (ან შეუთავსებელ) გამონაკლისებს, ვიდრე მშობლის მეთოდის მითითებული.
- სტატიკური მეთოდები ვერ იქნება გადაწერილი, მხოლოდ დამალული (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");
}
}