Sobes.tech
Middle
140

Jaké mechanismy implementace polymorfismu v Javě existují?

Odpověď od AI

sobes.tech AI

  • Překladový čas (statický polymorfismus): Je realizován pomocí přetížení metod (method overloading). Metody mají stejný název, ale různé podpisy (počet, typ nebo pořadí argumentů).

    class Calculator {
        // Přetížení metody add
        public int add(int a, int b) {
            return a + b;
        }
    
        public double add(double a, double b) {
            return a + b;
        }
    }
    
  • Dynamický polymorfismus (běhový čas): Je realizován pomocí přepsání metod (method overriding). Metoda v podtřídě má stejnou signaturu jako metoda v nadtřídě a poskytuje vlastní implementaci. Rozhodnutí, kterou metodu volat, se provádí v době běhu na základě skutečného typu objektu.

    class Animal {
        public void sound() {
            System.out.println("Zvíře vydává zvuk");
        }
    }
    
    class Dog extends Animal {
        // Přepsání metody sound
        @Override
        public void sound() {
            System.out.println("Pes štěká");
        }
    }
    
    class Cat extends Animal {
        // Přepsání metody sound
        @Override
        public void sound() {
            System.out.println("Kočka mňouká");
        }
    }
    
  • Odkazy na nadtřídu / rozhraní: Objektům podtříd lze přiřadit odkazy na nadtřídy nebo rozhraní, které implementují. To umožňuje jednotné zpracování objektů různých typů prostřednictvím společného odkazu. Volání přepsané metody přes takový odkaz vede k provedení verze metody z skutečného typu objektu.

    Animal myAnimal = new Dog(); // Přiřazení objektu Dog k odkazu typu Animal
    myAnimal.sound(); // Volání přepsané metody sound() z třídy Dog