Sobes.tech
Junior

Mis on pärimine ja polümorfism viiteandmetüüpides?

sobes.tech AI

Vastus AI-lt

Pärilimine — see on mehhanism, mis võimaldab uuel klassil (alamklass/poegklass) pärida olemasoleva klassi (superklass/vanemklass) omadused (väljad) ja käitumise (meetodid), lai laiendada või üle kirjutada funktsionaalsust. See soodustab koodi korduvkasutust ja "on" (is-a) suhete loomist.

Polümorfism — see on võimalus erinevatel klassidel olevatel objektidel vastata samale meetodi nimele erinevalt, sõltuvalt nende konkreetset tüübist täitmise ajal. See tagab koodi paindlikkuse ja laiendatavuse, võimaldades töödelda alamklasside objekte superklassist viitega.

Need kontseptsioonid mängivad võtmerolli viidetüüpides (klassides):

  • Pärilikkus: Alamklass saab juurdepääsu superklassi liikmetele ning võib lisada oma või muuta pärandatud meetodite käitumist (üle kirjutamine — overriding). Alamklassi objekt võib olla kasutatav igal pool, kus oodatakse superklassi objekti.
  • Polümorfism: Erinevad objektid, mis kuuluvad ühte pärilushierarhiasse, võivad olla töödeldud ühe ja sama koodiga, kutsudes sama meetodi, kuid selle teostus sõltub konkreetse objekti tüübist täitmise ajal.

Näide Java-s:

// Superklass (vanemklass)
class Animal {
    public void makeSound() {
        System.out.println("Hääl väljastab");
    }
}

// Alamklass (poegklass), pärib Animalist
class Dog extends Animal {
    // Üle kirjutada meetod superklassist
    @Override
    public void makeSound() {
        System.out.println("Haug!");
    }
}

// Alamklass (poegklass), pärib Animalist
class Cat extends Animal {
    // Üle kirjutada meetod superklassist
    @Override
    public void makeSound() {
        System.out.println("Miau!");
    }
}

// Polümorfismi näide
public class PolymorphismExample {
    public static void main(String[] args) {
        Animal myAnimal = new Animal(); // superklassi objekt
        Animal myDog = new Dog();       // alamklassi objekt, viide superklassile
        Animal myCat = new Cat();       // alamklassi objekt, viide superklassile

        myAnimal.makeSound(); // Tulemuseks: Hääl väljastab
        myDog.makeSound();    // Tulemuseks: Haug! (polümorfism — kutsutakse Dog meetod)
        myCat.makeSound();    // Tulemuseks: Miau! (polümorfism — kutsutakse Cat meetod)
    }
}