Sobes.tech
Junior

Quando um método é considerado sobrescrito (overriding)?

sobes.tech IA

Resposta da IA

Um método é considerado sobrescrito quando numa classe filha é declarado um método com a mesma assinatura (nome do método, número e tipos de parâmetros na mesma ordem) que na classe pai. Além disso:

  1. O método na classe pai não deve estar declarado como final (ou um modificador equivalente em outras linguagens), que impede a sobrescrição.
  2. O nível de acesso do método sobrescrito na classe filha não pode ser mais restritivo do que na classe pai.
  3. O método sobrescrito pode devolver o mesmo tipo que o método na classe pai, ou um tipo covariante (subtipo do tipo original).
  4. O método sobrescrito não pode lançar exceções que sejam mais gerais (ou incompatíveis) do que as exceções declaradas no método da classe pai.
  5. Métodos estáticos não podem ser sobrescritos, apenas ocultados (hidden).

Ao chamar o método sobrescrito através de uma referência à classe pai, mas com um objeto da classe filha, é a versão do método da classe filha que é executada (polimorfismo).

// Exemplo em Java

class Parent {
    public void display() { // Método na classe pai
        System.out.println("Parent display");
    }

    // final void cannotOverride() { ... } // Este método não pode ser sobrescrito
}

class Child extends Parent {
    @Override // Anotação @Override ajuda o compilador a verificar se o método realmente está sendo sobrescrito
    public void display() { // Método sobrescrito com a mesma assinatura
        System.out.println("Child display");
    }
}