Sobes.tech
Middle

Qual método não pode ser sobrescrito na programação orientada a objetos?

sobes.tech IA

Resposta da IA

Em algumas linguagens, como Ruby, o método de classe initialize, usado para inicializar novos objetos, não pode ser chamado diretamente numa classe filha como super.initialize para executar a lógica da classe pai. Em vez disso, a classe filha deve chamar explicitamente o método super na sua implementação de initialize, o que invoca automaticamente o método initialize da classe pai.

Em outras linguagens, como Java ou C#, não existem "métodos" de utilizador que não possam ser sobrescritos no sentido tradicional, pois qualquer método público ou protegido (!) que não esteja marcado como final (Java) ou sealed (C#) pode ser sobrescrito. No entanto, pode-se considerar que os construtores são um tipo especial de "método" que não pode ser sobrescrito no sentido habitual: não é possível declarar um método com o mesmo nome e assinatura dentro de uma classe filha que substitua o construtor da classe pai. A classe filha pode ter os seus próprios construtores, que por sua vez chamam os construtores da classe pai através de super (Java) ou : base (C#).

class Parent {
    Parent() {
        System.out.println("Construtor da classe pai");
    }
    void method() {
        System.out.println("Método da classe pai");
    }
}

class Child extends Parent {
    Child() {
        // Chamada explícita ao construtor do pai não é necessária,
        // se não houver parâmetros, é chamada automaticamente.
        System.out.println("Construtor da classe filha");
    }
    @Override // Sobrescrita de método é possível
    void method() {
        System.out.println("Método da classe filha");
    }
}

Portanto, em termos gerais, pode-se considerar que os construtores são métodos que não podem ser sobrescritos no mesmo sentido que os métodos normais.