Sobes.tech
Junior — Middle

Kuo skiriasi statiniai metodai objektų orientuoto programavimo kalboje nuo metodų, kurie perrašomi vaikų klasėse?

sobes.tech AI

Atsakymas iš AI

„Java“ statiniai metodai priklauso pačiai klasei, o ne jos egzemplioriams. Jie kviečiami per klasės pavadinimą ir negali būti perrašyti vaikų klasėse, nes nedalyvauja polimorfizme.

Skirtingai nuo jų, metodai, kuriuos galima perrašyti (ne statiniai), priklauso objektams ir palaiko dinaminį polimorfizmą. Kviesdami metodą per bazinės klasės nuorodą, faktinė įgyvendinimo vieta nustatoma pagal objekto tipą vykdymo metu.

Pavyzdys:

class Parent {
    static void staticMethod() {
        System.out.println("Parent statinis metodas");
    }
    void instanceMethod() {
        System.out.println("Parent instancijos metodas");
    }
}

class Child extends Parent {
    static void staticMethod() {
        System.out.println("Child statinis metodas");
    }
    @Override
    void instanceMethod() {
        System.out.println("Child instancijos metodas");
    }
}

public class Test {
    public static void main(String[] args) {
        Parent p = new Child();
        p.staticMethod();      // Išves: Parent statinis metodas
        p.instanceMethod();    // Išves: Child instancijos metodas
    }
}

Čia, statinis metodas kviečiamas pagal nuorodos tipą (Parent), o nestatinis — pagal objekto tipą (Child).