Qayta ishlash turlari va polimorfizm nima?
sobes.tech AI
AIdan javob
Meros kalitish, yangi sinf (voris, bolalar sinfi) mavjud sinf (ota-sinif, super sinf) maydonlari va metodlarini meros olish imkonini beradigan mexanizmdir. Bu kodni qayta ishlatishni va sinf hierarhiyasini rivojlantiradi.
Polimorfizm (turlar xilma-xilligi) - ob'ektning bir nechta shaklga ega bo'lish qobiliyatidir. Referens tiplari kontekstida, bu shuni anglatadiki, super sinf o'zgaruvchisi sub sinf ob'ektiga murojaat qilishi mumkin. Bu turli sub sinflardagi ob'ektlarni umumiy interfeys yoki super sinf orqali bir xil tarzda ishlash imkonini beradi.
Polimorfizmning ikki asosiy turi mavjud:
- Kompilyatsiya vaqti (statik polimorfizm): odatda metodlar overload qilish (method overloading) orqali erishiladi, bir sinfda bir xil nomli, ammo turli imzolar (parametrlar soni va/t yoki turlari) bilan bir nechta metodlar bo'lsa.
- Ijro vaqti (dinamik polimorfizm): metodlarni override qilish (method overriding) orqali erishiladi, sub sinfa o'zining metodni taqdim etadi, bu metod super sinfda oldindan belgilangan. Bu metodni super sinfga murojaat qilish orqali chaqirilganda, sub sinfning implementatsiyasi bajariladi (agar ob'ekt turi sub sinf bo'lsa).
Kiritilgan misol va dinamik polimorfizm:
// Asosiy sinf
class Animal {
public void makeSound() {
System.out.println("Umumiy hayvon tovushi");
}
}
// Voris sinf
class Dog extends Animal {
@Override // Metodni qayta yozish
public void makeSound() {
System.out.println("Gav!");
}
}
// Voris sinf
class Cat extends Animal {
@Override // Metodni qayta yozish
public void makeSound() {
System.out.println("Miy!");
}
}
public class Main {
public static void main(String[] args) {
// Statik tur Animal, dinamik tur Dog ob'ekti
Animal myDog = new Dog();
// Statik tur Animal, dinamik tur Cat ob'ekti
Animal myCat = new Cat();
// Statik tur Animal, dinamik tur Animal ob'ekti
Animal genericAnimal = new Animal();
// Polimorfizmni ko'rsatish
myDog.makeSound(); // Dog metodini chaqiradi
myCat.makeSound(); // Cat metodini chaqiradi
genericAnimal.makeSound(); // Animal metodini chaqiradi
}
}
Ushbu misolda, Dog va Cat Animal dan meros oladi. myDog, myCat va genericAnimal o'zgaruvchilari statik turda Animal, ammo turli dinamik turlarga (Dog, Cat, Animal) murojaat qiladilar. makeSound() metodini chaqirishda, har bir murojaat ob'ektning dinamik turiga mos ravishda mos metod bajariladi, bu esa ijro vaqtidagi polimorfizmni tashkil etadi.