Kas ir manto un polimorfisms atsauces datu tipos?
sobes.tech AI
Atbilde no AI
Mantošana — tas ir mehānisms, kas ļauj jaunam klasei (manto, apakšklasei, apakšklasei) mantot esošās klases (vecāka, superklases) laukus un metodes. Tas veicina koda atkārtotu izmantošanu un klases hierarhiju.
Polimorfisms (daudzveidība formās) — tas ir objekta spēja būt vairākām formām. Kontekstā ar atsauces tipiem tas nozīmē, ka superklases mainīgais var atsaukties uz apakšklases objektu. Tas ļauj apstrādāt dažādu apakšklases objektus vienotā veidā caur kopēju interfeisu vai superklasi.
Ir divi galvenie polimorfisma veidi:
- Kompilācijas laiks (statiskais polimorfisms): Parasti tiek sasniegts ar metožu pārrakstīšanu (method overloading), kad vienā klasē ir vairākas metodes ar vienādu nosaukumu, bet dažādām signaturām (parametru skaitu un/ vai tipus).
- Izpildes laiks (dinamisks polimorfisms): Tiek sasniegts ar metožu pārrakstīšanu (method overriding), kad apakšklase nodrošina savu realizāciju jau definētai metodai superklasē. Izsaucot tādu metodi caur superklases atsauci, tiks izpildīta apakšklases realizācija (ja objekta tips — apakšklase).
Piemērs mantošanai un dinamiskajam polimorfismam:
// Pamatklase
class Animal {
public void makeSound() {
System.out.println("Vispārīgs dzīvnieka skaņa");
}
}
// Apakšklase
class Dog extends Animal {
@Override // Pārrakstīšana
public void makeSound() {
System.out.println("Vau!");
}
}
// Apakšklase
class Cat extends Animal {
@Override // Pārrakstīšana
public void makeSound() {
System.out.println("Mau!");
}
}
public class Main {
public static void main(String[] args) {
// Statiskā tipa mainīgais — Animal, dinamisks tips — Dog
Animal myDog = new Dog();
// Statiskā tipa mainīgais — Animal, dinamisks tips — Cat
Animal myCat = new Cat();
// Statiskā tipa mainīgais — Animal, dinamisks tips — Animal
Animal genericAnimal = new Animal();
// Polimorfisma demonstrācija
myDog.makeSound(); // Izsauks Dog metodi
myCat.makeSound(); // Izsauks Cat metodi
genericAnimal.makeSound(); // Izsauks Animal metodi
}
}
Šajā piemērā Dog un Cat manto no Animal. Mainīgie myDog, myCat un genericAnimal ir statiska tipa Animal, bet atsaucas uz dažādu dinamisko tipu objektiem (Dog, Cat, Animal). Izsaucot makeSound() metodi, katrā gadījumā tiek izpildīta atbilstošā metodes realizācija atkarībā no objekta dinamiskā tipa, kas ir izpildes laika polimorfisms.