Junior
Кай вақт аст, ки ивазкунии усул (overriding) рух медиҳад؟
sobes.tech AI
Ҷавоб аз AI
Методро (overriding) қайталаши мураббийлик ҳиерархиясида юзага келади, у ерда қўшилган синф ўзининг ўзгача амалга оширишини тақдим этади, бу амалга ошириш аллақачон ота синфда белгиланган бўлиб, у ном, имзо (тури ва параметрлар сони билан мувофиқлик) ва қайтариш тури (ёки қайтариш тури-объектнинг коварианти) билан бир хил бўлиши керак.
Асосий хусусиятлар:
- Мураббийлик: Қайта ёзиш фақат мураббийлик контекстида (ота ва қўшилган синфлар) мумкин.
- Имзо: Қўшилган синфдаги метод, ота синфдаги метод билан бир хил имзога (ном, параметрлар сони ва тури) ва бир хил қайтариш турига (ёки унинг коварианти) эга бўлиши керак.
- Кириш имконияти: Қайта ёзилаётган метод, қўшилган синф учун кириш имкониятига эга бўлиши керак (одатда
public,protected). - Полиморфизм: Қайта ёзиш, иш вақти полиморфизмининг асосидир, бу объектларга ўз услубида жавоб бериш имконини беради, ҳатто уларга ота синфга ишора қилган ҳолда мурожаат қилинса ҳам.
Масалан (Java):
// Ота синф
class Animal {
// Қайта ёзиладиган метод
public void makeSound() {
System.out.println("Ҳайвон овоз чиқаради");
}
}
// Қўшилган синф
class Dog extends Animal {
// makeSound() методининг қайта ёзилиши
@Override // @Override аннотацияси опционал, аммо тавсия этилади
public void makeSound() {
System.out.println("Эт гавгаяди");
}
}
Ишлатиш мисоли:
// Dog объектини яратиш
Animal myDog = new Dog();
// Методни чақириш. Бу, Dogда қайта ёзилган версиясини чақиради
myDog.makeSound(); // Чиқиш: Эт гавгаяди
// Animal объектини яратиш
Animal someAnimal = new Animal();
// Методни чақириш. Бу, Animalдаги версиясини чақиради
someAnimal.makeSound(); // Чиқиш: Ҳайвон овоз чиқаради