Sobes.tech
Junior — Middle

Czym różnią się metody statyczne w programowaniu obiektowym od metod nadpisywanych w klasach potomnych?

sobes.tech AI

Odpowiedź od AI

Metody statyczne w Java należą do samej klasy, a nie do instancji. Są wywoływane przez nazwę klasy i nie mogą być nadpisywane w klasach potomnych, ponieważ nie uczestniczą w polimorfizmie.

W przeciwieństwie do nich, metody, które można nadpisywać (niestatyczne), należą do obiektów i obsługują polimorfizm dynamiczny. Przy wywołaniu metody przez odwołanie do klasy bazowej, rzeczywista implementacja jest określana przez typ obiektu w czasie wykonywania.

Przykład:

class Parent {
    static void staticMethod() {
        System.out.println("Metoda statyczna Parent");
    }
    void instanceMethod() {
        System.out.println("Metoda instancji Parent");
    }
}

class Child extends Parent {
    static void staticMethod() {
        System.out.println("Metoda statyczna Child");
    }
    @Override
    void instanceMethod() {
        System.out.println("Metoda instancji Child");
    }
}

public class Test {
    public static void main(String[] args) {
        Parent p = new Child();
        p.staticMethod();      // Wypisze: Metoda statyczna Parent
        p.instanceMethod();    // Wypisze: Metoda instancji Child
    }
}

Tutaj, metoda statyczna jest wywoływana na podstawie typu odwołania (Parent), a metoda niestatyczna na podstawie typu obiektu (Child).