Sobes.tech
Junior — Middle

In che modo i metodi statici nella programmazione orientata agli oggetti differiscono dai metodi sovrascritti nelle classi derivate?

sobes.tech AI

Risposta dell'AI

I metodi statici in Java appartengono alla classe stessa, non agli istanti. Vengono chiamati tramite il nome della classe e non possono essere sovrascritti nelle classi derivate, poiché non partecipano al polimorfismo.

Al contrario, i metodi che possono essere sovrascritti (non statici) appartengono agli oggetti e supportano il polimorfismo dinamico. Quando si chiama un metodo tramite un riferimento alla classe base, l'implementazione reale viene determinata dal tipo dell'oggetto durante l'esecuzione.

Esempio:

class Parent {
    static void staticMethod() {
        System.out.println("Metodo statico di Parent");
    }
    void instanceMethod() {
        System.out.println("Metodo di istanza di Parent");
    }
}

class Child extends Parent {
    static void staticMethod() {
        System.out.println("Metodo statico di Child");
    }
    @Override
    void instanceMethod() {
        System.out.println("Metodo di istanza di Child");
    }
}

public class Test {
    public static void main(String[] args) {
        Parent p = new Child();
        p.staticMethod();      // Stampa: Metodo statico di Parent
        p.instanceMethod();    // Stampa: Metodo di istanza di Child
    }
}

Qui, il metodo statico viene chiamato in base al tipo di riferimento (Parent), mentre il metodo non statico in base al tipo dell'oggetto (Child).