O que é um método estático?
Um método de programação de computador orientado a objetos que é declarado em uma classe, mas não depende de nenhuma instanciação específica dessa classe, é chamado de método estático. A maioria das linguagens de programação inclui a palavra-chave estática na declaração de um método para torná-lo estático. Esses métodos pertencem estritamente à classe em que estão contidos e não a qualquer objeto instanciado a partir dessa classe. Eles são freqüentemente chamados de métodos de classe .
O nome literal da classe é normalmente usado para acessar um método estático, em vez de se referir a ele com o nome de um objeto instanciado. É permitido em Java usar nomes de objetos para se referir a esses métodos, mas isso é fortemente desencorajado. Se um nome de objeto for usado, uma pessoa que estiver lendo o código poderá confundir um desses métodos com um método de instância.
Métodos estáticos são freqüentemente usados em classes de utilitários que não dependem de variáveis de instância de nenhuma classe específica. Eles também são usados quando um programador precisa acessar o método, mas não há necessidade de instanciar a classe em que está contido. As classes de utilitário normalmente não são instanciadas em objetos. Seria incomum um método utilitário precisar modificar as informações do objeto. Um método da classe java.lang.math, como pow (), seria um exemplo de como esse tipo de método seria usado em uma classe de utilitário.
Os métodos de instância podem acessar diretamente variáveis de instância, variáveis estáticas, métodos de instância e métodos estáticos. Métodos estáticos não podem acessar diretamente variáveis e métodos de instância. Devido à natureza dos métodos de instância terem melhor acesso aos membros da classe do que aos métodos estáticos, os métodos de instância são o tipo de método normalmente usado nas classes regulares.
Uma grande desvantagem dos métodos estáticos ocorre durante a herança quando o polimorfismo é usado. Desde que o método estático pai não seja declarado final, o mesmo método estático filho pode ser codificado na classe filho como se estivesse sendo substituído. Isso é tecnicamente chamado de ocultar em vez de substituir, porque um método estático não pode ser substituído.
Quando ocultar é usado, se o método estático pai for acessado usando o nome da classe, o método pai será usado. Se o método estático filho substituído for acessado usando o nome do objeto, o método filho substituído será usado. O problema ocorre quando um objeto filho é upcast como pai. Nesse caso, uma chamada para o método estático filho upcast usará o método pai em vez do método filho esperado. Com o polimorfismo verdadeiro, o método filho seria o ativado após um upcast.