Sobes.tech
Middle

Aké mechanizmy implementácie polymorfizmu existujú v Jave?

sobes.tech AI

Odpoveď od AI

  • Prekladový čas (statický polymorfizmus): Je realizovaný pomocou preťaženia metód (method overloading). Metódy majú rovnaký názov, ale rôzne podpisy (počet, typ alebo poradie argumentov).

    class Calculator {
        // Preťaženie metódy add
        public int add(int a, int b) {
            return a + b;
        }
    
        public double add(double a, double b) {
            return a + b;
        }
    }
    
  • Dynamický polymorfizmus (čas behu): Je realizovaný pomocou prepisovania metód (method overriding). Metóda v podtriede má rovnakú podpis ako metóda v nadtriede a poskytuje vlastnú implementáciu. Rozhodnutie, ktorú metódu volať, sa prijíma počas behu na základe skutočného typu objektu.

    class Animal {
        public void sound() {
            System.out.println("Zviera vydáva zvuk");
        }
    }
    
    class Dog extends Animal {
        // Prepisovanie metódy sound
        @Override
        public void sound() {
            System.out.println("Pes šteka");
        }
    }
    
    class Cat extends Animal {
        // Prepisovanie metódy sound
        @Override
        public void sound() {
            System.out.println("Mačka mňauká");
        }
    }
    
  • Odkazy na nadtriedu / rozhranie: Objektom podtried môžu byť priradené odkazy na nadtriedy alebo rozhrania, ktoré implementujú. To umožňuje jednotné spracovanie objektov rôznych typov prostredníctvom spoločného odkazu. Volanie prepisanej metódy cez takýto odkaz vedie k vykonaniu verzie metódy z reálneho typu objektu.

    Animal myAnimal = new Dog(); // Priradenie objektu Dog odkazu typu Animal
    myAnimal.sound(); // Volanie prepisanej metódy sound() z triedy Dog