Qual é a diferença entre sobrecarregar um método e substituí-lo em Java?
Existe uma diferença na assinatura do método, no especificador de acesso, no tipo de retorno etc.?
java
object-oriented
user63948
fonte
fonte
Respostas:
Para sobrecarregar um método com um novo método, o novo método deve ter uma assinatura diferente. Ou seja, dois métodos sobrecarregados têm o mesmo nome, mas parâmetros diferentes. Aqui está um exemplo de dois métodos sobrecarregados:
Com base nos tipos de parâmetro, o método correspondente será chamado. Observe que alterar o tipo de retorno não é suficiente (embora você possa fazer isso adicionalmente).
Quando um método é substituído, o novo método tem a mesma assinatura e, em alguns casos, substitui o método substituído. Aqui está um exemplo de um método substituído:
A escolha é feita com base no tipo de objeto. Por exemplo,
chamará o
someMethod
deB
. Você pode (e deve) adicionar a anotação @Override:Agora, se você acidentalmente alterar os parâmetros em B, o compilador informará que você não está substituindo someMethod (), mas sobrecarregando-o.
fonte
Sobrecarregando, os métodos têm o mesmo nome, mas parâmetros diferentes.
Substituindo, a implementação dada na classe base é substituída pela da subclasse.
fonte
Os conceitos sobre os quais você pergunta são abordados nos tutoriais de Java.
A explicação para a substituição é fornecida da seguinte maneira:
A sobrecarga é explicada no tutorial da seguinte maneira:
A explicação acima para sobrecarregar menciona as qualificações discutidas na lição intitulada "Interfaces e herança" :
fonte
A sobrecarga de um método é normalmente definida como "fornecendo vários métodos disponíveis com o mesmo nome, diferindo pelo número e tipo de entradas e saídas". Geralmente, o conceito é que você deseja executar a mesma operação básica, considerando diversos conjuntos de entradas: é possível, por exemplo, "adicionar" quaisquer dois valores do tipo numérico; no entanto, geralmente é importante saber qual o tipo exato de o valor é para que você possa tirar proveito ou planejar comportamentos específicos desse tipo. Como tal, você definiria um método para cada combinação de tipos numéricos (e / ou coleções) que deseja oferecer suporte. Todos esses métodos têm o mesmo nome, mas "assinaturas" diferentes; em tempo de compilação,
A substituição de um método é normalmente definida como "fornecendo uma implementação diferente em uma classe derivada de um método com uma assinatura específica definida na classe base". Há muitas razões para substituir um método; praticamente todos eles têm em comum o fato de que a classe derivada possui conhecimento adicional do que deve ser feito, o que não pode ser conhecido pela classe base. Existem dois tipos de substituição na maioria dos idiomas OO; a substituição pode substituir o método da classe base ou pode estendero método da classe base. A diferença geralmente é que uma classe derivada que está estendendo uma implementação de classe base chamará a versão substituída da classe base em algum momento durante a execução do método substituto. Isso permite que as classes substituintes "reutilizem" áreas comuns da operação que estão contidas na classe base.
fonte