Che cos’è un metodo statico?

Un metodo di programmazione per computer orientato agli oggetti che è dichiarato in una classe ma non dipende da alcuna istanza particolare di quella classe è chiamato metodo statico. La maggior parte dei linguaggi di programmazione include la parola chiave static nella dichiarazione di un metodo per rendere un metodo statico. Questi metodi appartengono strettamente alla classe in cui sono contenuti e non a nessun oggetto istanziato da quella classe. Sono spesso indicati come metodi di classe.

Il nome letterale della classe viene normalmente utilizzato per accedere a un metodo statico invece di fare riferimento ad esso con il nome di un oggetto istanziato. È consentito in Java utilizzare i nomi degli oggetti per fare riferimento a questi metodi, ma è fortemente sconsigliato. Se viene utilizzato un nome di oggetto, una persona che legge il codice può confondere uno di questi metodi con un metodo di istanza.

I metodi statici vengono spesso utilizzati nelle classi di utilità che non dipendono dalle variabili di istanza di una classe particolare. Vengono anche utilizzati quando un programmatore deve accedere al metodo ma non è necessario istanziare la classe in cui è contenuto. Le classi di utilità normalmente non vengono istanziate negli oggetti. Sarebbe insolito che un metodo di utilità avesse la necessità di modificare le informazioni sull’oggetto. Un metodo della classe java.lang.math, come pow(), sarebbe un esempio di come questo tipo di metodo verrebbe utilizzato in una classe di utilità.

I metodi di istanza possono accedere direttamente a variabili di istanza, variabili statiche, metodi di istanza e metodi statici. I metodi statici non possono accedere direttamente alle variabili di istanza e ai metodi di istanza. A causa della natura dei metodi di istanza che hanno un migliore accesso ai membri della classe rispetto ai metodi statici, i metodi di istanza sono il tipo di metodi normalmente utilizzati nelle classi regolari.

Uno dei principali svantaggi dei metodi statici si verifica durante l’ereditarietà quando viene utilizzato il polimorfismo. Finché il metodo statico padre non è dichiarato definitivo, lo stesso metodo statico figlio può essere codificato nella classe figlio come se fosse stato sovrascritto. Questo è tecnicamente chiamato nascondere invece di sovrascrivere perché un metodo statico non può essere sovrascritto.

Quando viene utilizzato l’occultamento, se si accede al metodo statico padre utilizzando il nome della classe, verrà utilizzato il metodo padre. Se si accede al metodo statico figlio con override utilizzando il nome dell’oggetto, verrà utilizzato il metodo figlio con override. Il problema si verifica quando un oggetto figlio viene convertito in upcast come padre. In questo caso, una chiamata al metodo statico figlio upcast utilizzerà il metodo padre invece del metodo figlio previsto. Con il vero polimorfismo, il metodo figlio sarebbe quello attivato dopo un upcast.