Muitos estudantes são estúpidos e não podem dizer a diferença entre sobrecarga e substituição. Recomenda -se não memorizar o conhecimento conceitual pela Rote, mas para entendê -lo e memorizá -lo.
Deixe -me primeiro dar minha definição:
Sobrecarga: na mesma classe ou no relacionamento de herança, um grupo de métodos com o mesmo nome e parâmetros diferentes. Essencialmente, é o nome de diferentes métodos.
Substituir: entre duas classes que têm relações de herança, os métodos existentes na classe pai são redefinidos na subclasse. A essência é fornecer implementações diferentes para o mesmo método.
Vamos primeiro olhar para o exemplo de sobrecarga:
classe pública sobrecarregarparent {public string getPerson (nome da string) {return "persona" + nome; } public String getPerson (int Age) {return "Personb"; } public string getPerson (nome da string, int age) {return "Personc"; } public void getPerson (nome da string) {System.out.println ("estou sobrecarregado método?"); }} classe pública sobrecarregchildExtends sobreloadparent {public void getPerson (Double Money) {System.out.println ("Eu sou um método sobrecarregado"); }}Preste atenção à observação:
(1) Existem 4 métodos com o mesmo nome em sobrecarregar
(2) Os tipos de parâmetros e números dos três primeiros métodos são inconsistentes e o valor de retorno é o mesmo, o que constitui uma sobrecarga
(3) O método 4 e o método 1 somente os valores de retorno são diferentes e não constituem sobrecarga, e o compilador não passa.
PS: O valor de retorno é o resultado da execução do método. Quando chamamos o método, não especificaremos "quero chamar um método com o valor de retorno do tipo XXX", ele não se tornará um recurso da sobrecarga do método.
(4) sobrecarregar a demonstração de herda e tem todos os métodos pertencentes à demonstração. Parecia que o método existente não poderia atender às necessidades, por isso simplesmente sobrecarregou um.
Sinalizadores sobrecarregados: o nome do método é o mesmo, os parâmetros são diferentes (número ou tipo) e não têm nada a ver com o valor de retorno.
Vamos dar uma olhada em um exemplo de substituição:
public }}
classe pública Overidechild estende a substituição de {@Override public void Fly () {System.out.println ("ICAN't Fly, mas eu posso correr!"); } public static vid main (string [] args) {SobreWriteParent Child = new OverWritechild (); Child.fly (); }}O que será produzido ao executar o método principal de Overidechild?
A resposta é: eu não posso mosca, mas posso correr!
Nós vemos:
(1) Overidechild e SubstrideParent têm um método de mosca
(2) O valor de retorno e o modificador da mosca são os mesmos, apenas o corpo do método é diferente
(3) Há uma anotação de @OverWrite antes do método de mosca da subclasse. JDK1.5 aparece e é usado apenas para herança de classe. 1.6 pode ser usado para implementação da interface. Esta anotação ajuda a verificar o compilador e não há problema em adicioná -la.
Sinalizadores substituídos: a criança herda a classe pai e possui implementações diferentes para o mesmo método.
Cenários de aplicação
Sobrecarga: quando as funções do método são semelhantes, mas parâmetros diferentes precisam ser passados.
Substituir: Quando uma subclasse tem seu próprio comportamento único, ele herda da classe pai e não pode atender às suas próprias necessidades.
PS: Sobrecarregamento e substituição são manifestações de polimorfismo. O primeiro é o polimorfismo do compilador, enquanto o último é o polimorfismo em tempo de execução.
Obrigado pela leitura, espero que isso possa ajudá -lo. Obrigado pelo seu apoio a este site!