Mis on pärandum ja polümorfism viiteandmetüüpides?
sobes.tech AI
Vastus AI-lt
Pärilusus — see on mehhanism, mis võimaldab uuel klassil (pärilane, alamklass, alamosa) pärida olemasoleva klassi (vanemklass, superklass) välju ja meetodeid. See soodustab koodi korduvkasutust ja klasside hierarhiat.
Polümorfism (paljude vormide) — see on objekti võime omada mitmeid vorme. Kontekstis viidete tüüpidega tähendab see, et superklassi muutuja võib viidata alamklassi objekti. See võimaldab töödelda erinevate alamklasside objekte ühtse liidese või superklassi kaudu.
On kaks peamist polümorfismi tüüpi:
- Kompileerimise aeg (staatiline polümorfism): saavutatakse tavaliselt meetodite ülekoormamise (method overloading) kaudu, kui ühes klassis on mitu meetodit sama nimega, kuid erinevate signatuuridega (parameetrite arv ja/või tüübid).
- Tööaeg (dünaamiline polümorfism): saavutatakse meetodite ülekirjutamise (method overriding) kaudu, kui alamklass pakub oma rakendust juba superklassis määratletud meetodile. Sellise meetodi kutsumisel superklassist, täidetakse alamklassi rakendus (kui objekti tüüp — alamklass).
Näide pärilikkusest ja dünaamilisest polümorfismist:
// Põhiklass
class Animal {
public void makeSound() {
System.out.println("Üldine looma hääl");
}
}
// Alamklass
class Dog extends Animal {
@Override // Meetodi ülekirjutamine
public void makeSound() {
System.out.println("Hau!");
}
}
// Alamklass
class Cat extends Animal {
@Override // Meetodi ülekirjutamine
public void makeSound() {
System.out.println("Mjäu!");
}
}
public class Main {
public static void main(String[] args) {
// Statiline tüüp — Animal, dünaamiline tüüp — Dog
Animal myDog = new Dog();
// Statiline tüüp — Animal, dünaamiline tüüp — Cat
Animal myCat = new Cat();
// Statiline tüüp — Animal, dünaamiline tüüp — Animal
Animal genericAnimal = new Animal();
// Polümorfismi demonstratsioon
myDog.makeSound(); // Kutsub Dog meetodi
myCat.makeSound(); // Kutsub Cat meetodi
genericAnimal.makeSound(); // Kutsub Animal meetodi
}
}
Selles näites pärivad Dog ja Cat Animal-st. Muutujad myDog, myCat ja genericAnimal on statilise tüübiga Animal, kuid viitavad erinevat tüüpi objektidele (Dog, Cat, Animal). makeSound() meetodi väljakutsumisel täidetakse iga kord vastava objekti dünaamilise tüübi põhjal, mis on tööaja polümorfism.