Sobes.tech
Junior

Šta je nasledjivanje i polimorfizam u referentnim tipovima podataka?

sobes.tech АИ

Одговор од АИ

Nasleđivanje — to je mehanizam koji omogućava novoj klasi (potklasi/ćerki klasi) da nasleđuje osobine (polja) i ponašanje (metode) postojeće klase (superklase/roditeljske klase), proširujući ili prepisujući funkcionalnost. To doprinosi ponovnoj upotrebi koda i uspostavljanju odnosa "jest" (is-a).

Polimorfizam — to je mogućnost objekata različitih klasa da na isti naziv metode odgovaraju na različite načine, u zavisnosti od svog konkretnog tipa tokom izvršenja. On obezbeđuje fleksibilnost i proširivost koda, omogućavajući obradu objekata potklasa putem reference na superklasu.

U referentnim tipovima podataka (klasama), ove koncepcije igraju ključnu ulogu:

  • Nasleđivanje: Potklasa dobija pristup članovima superklase i može dodavati svoje ili menjati ponašanje nasleđenih metoda (prepisivanje - overriding). Objekt potklase može biti korišćen svuda gde se očekuje objekat superklase.
  • Polimorfizam: Različiti objekti, koji pripadaju istoj hijerarhiji nasleđivanja, mogu biti obrađeni istim kodom, pozivajući istu metodu, ali će se izvršiti implementacija te metode, specifična za konkretan tip objekta tokom izvršenja.

Primer u Javi:

// Superklasa (roditeljska)
class Animal {
    public void makeSound() {
        System.out.println("Izduje zvuk");
    }
}

// Potklasa (ćerka klasa), nasleđuje od Animal
class Dog extends Animal {
    // Prepisivanje metode iz superklase
    @Override
    public void makeSound() {
        System.out.println("Gav!");
    }
}

// Potklasa (ćerka klasa), nasleđuje od Animal
class Cat extends Animal {
    // Prepisivanje metode iz superklase
    @Override
    public void makeSound() {
        System.out.println("Mjau!");
    }
}

// Primer polimorfizma
public class PolymorphismExample {
    public static void main(String[] args) {
        Animal myAnimal = new Animal(); // objekat superklase
        Animal myDog = new Dog();       // objekat potklase, referenca na superklasu
        Animal myCat = new Cat();       // objekat potklase, referenca na superklasu

        myAnimal.makeSound(); // Ispisaće: Izduje zvuk
        myDog.makeSound();    // Ispisaće: Gav! (polimorfizam - poziva se metoda Dog)
        myCat.makeSound();    // Ispisaće: Mjau! (polimorfizam - poziva se metoda Cat)
    }
}