Sobes.tech
Junior — Middle

V čem se liší statické metody v objektově orientovaném programování od metod, které jsou přepisovány v odvozených třídách?

sobes.tech AI

Odpověď od AI

Statické metody v jazyce Java patří samotné třídě, nikoli instancím. Jsou volány přes název třídy a nemohou být přepsány v podtřídách, protože se nezúčastňují polymorfismu.

Na rozdíl od nich, metody, které lze přepsat (ne statické), patří objektům a podporují dynamický polymorfismus. Při volání metody přes odkaz na základní třídu je skutečná implementace určena typem objektu za běhu.

Příklad:

class Parent {
    static void staticMethod() {
        System.out.println("Statická metoda rodiče");
    }
    void instanceMethod() {
        System.out.println("Metoda instance rodiče");
    }
}

class Child extends Parent {
    static void staticMethod() {
        System.out.println("Statická metoda dítěte");
    }
    @Override
    void instanceMethod() {
        System.out.println("Metoda instance dítěte");
    }
}

public class Test {
    public static void main(String[] args) {
        Parent p = new Child();
        p.staticMethod();      // Výstup: Statická metoda rodiče
        p.instanceMethod();    // Výstup: Metoda instance dítěte
    }
}

Zde je statická metoda volána podle typu reference (Parent), a nestatická podle typu objektu (Child).