Sobes.tech
Middle

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:

  1. 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).
  2. 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.