O que é a substituição do método?
A substituição do método é usada na programação orientada a objetos dentro de uma hierarquia de herança e ocorre quando um método definido em uma superclasse é redefinido em uma subclasse. Geralmente, o método da subclasse faz algo diferente do método da superclasse ou expande uma capacidade da superclasse, mas esse não precisa ser o caso. A substituição do método ocorre sempre que um método de superclasse é redefinido em uma subclasse, independentemente do conteúdo do método redefinido. As assinaturas de método redefinidas devem ser exatamente as mesmas. Além disso, as classes B e C podem ser subclasses da Classe A. Classe B podem conter um método chamado "Dosomething", que não leva parâmetros de entrada, e a Classe C pode conter um método "Dosomething" que leva um número como um parâmetro de entrada. Neste exemplo, apenas a classe B demonstraria a substituição do método, porque seu método "doSomething" tem o mesmo euThod Signature como sua superclasse, classe A. O método "Dosomething" na classe C, por outro lado, demonstra sobrecarga de método porque cria um método completamente novo.
A herança virtual em C ++ é outro exemplo de substituição do método. Os métodos virtuais em superclasses podem ou não ser implementados, mas qualquer definição de subclasse deles é uma instância de substituição do método. Quando um método é substituído em uma subclasse, o método da superclasse não é chamado, a menos que seja invocado explicitamente. Essa maneira específica de chamar um método substituído é frequentemente "ocultar" a implementação da superclasse.
Embora a substituição do método seja muito flexível, nem todos os métodos podem ser substituídos e há momentos em que essa rigidez pode ser preferível. Tanto em Java quanto C ++, palavras -chave específicas podem ser aplicadas nas assinaturas de método para impedir que um método seja substituído em uma subclasse. Para fazer isso, Javausa a palavra -chave "final" e o C ++ usa a palavra -chave "const". Prevenir a substituição do método pode ser benéfica se uma função específica sempre permanecer inalterada em uma árvore de herança.
Em geral, métodos simples que recebem pequenos dados não precisam ser substituídos. Os casos que tendem a se beneficiar mais com a substituição são quando uma subclasse visa adicionar funcionalidade a um método de superclasse sem criar um método totalmente novo para fazê -lo. Casos incomuns nos quais um método precisa ser completamente refeito para um tipo específico de objeto também pode se beneficiar dessa técnica. Sempre que um método é substituído, é importante para o programador comentar adequadamente os métodos de superclasse e subclasse. Idealmente, esses comentários devem esclarecer o que cada variante do método faz, bem como e por que eles diferem.