Sobes.tech
Middle

É possível sobrescrever métodos estáticos em Java?

sobes.tech IA

Resposta da IA

Não, não é possível sobrescrever métodos estáticos em Java. Os métodos estáticos pertencem à classe, não a uma instância específica do objeto. Quando um método estático com a mesma assinatura do método estático da superclasse é herdado, isso não é uma sobrescrita; é chamado escondimento (method hiding). A chamada de um método estático é sempre determinada pelo tipo de referência, não pelo tipo do objeto.

class Parent {
    public static void staticMethod() {
        System.out.println("Método estático em Parent");
    }
}

class Child extends Parent {
    // Isto não é uma sobrescrita, mas um escondimento
    public static void staticMethod() {
        System.out.println("Método estático em Child");
    }
}

public class Main {
    public static void main(String[] args) {
        Parent.staticMethod(); // Chama o método estático de Parent
        Child.staticMethod();  // Chama o método estático de Child

        Parent p = new Child();
        // Chama o método estático de Parent, porque o tipo de referência é Parent
        p.staticMethod();
    }
}

Neste exemplo, embora a variável p faça referência a um objeto Child, a chamada a p.staticMethod() invoca o método estático da classe Parent. Isto demonstra que os métodos estáticos não participam no polimorfismo de execução, que é característico da sobrescrita.