Sobes.tech
Junior — Middle

Ako sa líšia statické metódy v objektovo orientovanom programovaní od metód, ktoré sa prepíšu v podtriedach?

sobes.tech AI

Odpoveď od AI

Statické metódy v Jave patria samotnej triede, nie inštanciám. Sú volané cez názov triedy a nemôžu byť prepísané v podtriedach, pretože sa nezúčastňujú polymorfizmu.

Na rozdiel od nich, metódy, ktoré je možné prepísať (ne statické), patria objektom a podporujú dynamický polymorfizmus. Pri volaní metódy cez odkaz na základnú triedu je skutočná implementácia určená typom objektu počas behu.

Príklad:

class Parent {
    static void staticMethod() {
        System.out.println("Statická metóda rodiča");
    }
    void instanceMethod() {
        System.out.println("Metóda inštancie rodiča");
    }
}

class Child extends Parent {
    static void staticMethod() {
        System.out.println("Statická metóda dieťaťa");
    }
    @Override
    void instanceMethod() {
        System.out.println("Metóda inštancie dieťaťa");
    }
}

public class Test {
    public static void main(String[] args) {
        Parent p = new Child();
        p.staticMethod();      // Výstup: Statická metóda rodiča
        p.instanceMethod();    // Výstup: Metóda inštancie dieťaťa
    }
}

Tu je statická metóda volaná na základe typu referencie (Parent), a nestatická na základe typu objektu (Child).