Vad är en statisk metod?

En objektorienterad datorprogrammeringsmetod som deklareras i en klass men inte är beroende av någon speciell instansiering av den klassen kallas en statisk metod. De flesta programmeringsspråk inkluderar nyckelordet static i deklarationen av en metod för att göra en metod statisk. Dessa metoder tillhör strikt klassen de ingår i och inte till något objekt som instansierats från den klassen. De kallas ofta klassmetoder.

Klassens bokstavliga namn används normalt för att komma åt en statisk metod istället för att referera till den med namnet på ett instansierat objekt. Det är tillåtet i Java att använda objektnamn för att referera till dessa metoder, men det avråds starkt. Om ett objektnamn används kan en person som läser koden förväxla en av dessa metoder med en instansmetod.

Statiska metoder används ofta i verktygsklasser som inte är beroende av instansvariabler från någon speciell klass. De används också när en programmerare behöver komma åt metoden men det finns inget behov av att instansiera klassen den ingår i. Verktygsklasser instansieras normalt inte i objekt. Det skulle vara ovanligt för en verktygsmetod att behöva modifiera objektinformation. En metod från klassen java.lang.math, såsom pow(), skulle vara ett exempel på hur denna typ av metod skulle användas i en verktygsklass.

Instansmetoder kan direkt komma åt instansvariabler, statiska variabler, instansmetoder och statiska metoder. Statiska metoder kan inte direkt komma åt instansvariabler och instansmetoder. På grund av att instansmetoder har bättre tillgång till klassmedlemmar än statiska metoder, är instansmetoder den typ av metoder som normalt används i vanliga klasser.

En stor nackdel med statiska metoder uppstår under nedärvning när polymorfism används. Så länge den överordnade statiska metoden inte deklareras som slutgiltig, kan samma statiska underordnade metod kodas i den underordnade klassen som om den skulle åsidosättas. Detta kallas tekniskt att dölja istället för att åsidosätta eftersom en statisk metod inte kan åsidosättas.

När döljning används, om den överordnade statiska metoden nås med klassnamnet, kommer den överordnade metoden att användas. Om den åsidosatta underordnade statiska metoden nås med hjälp av objektnamnet kommer den åsidosatta underordnade metoden att användas. Problemet uppstår när ett underordnat objekt sänds upp som förälder. I det här fallet kommer ett anrop till den uppsända underordnade statiska metoden att använda den överordnade metoden istället för den förväntade underordnade metoden. Med äkta polymorfism skulle barnmetoden vara den som aktiveras efter en upcast.