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:
Primeiro, vamos falar sobre: sobrecarga
(1) A sobrecarga do método é um meio de permitir que as classes processem diferentes tipos de dados de maneira unificada. Múltiplas funções com o mesmo nome existem ao mesmo tempo, com parâmetros/tipos diferentes. A sobrecarga é uma manifestação do polimorfismo em uma classe.
(2) A sobrecarga do método Java significa que vários métodos podem ser criados em uma classe, eles têm o mesmo nome, mas têm parâmetros diferentes e definições diferentes. Ao chamar métodos, decidimos qual método usar pelo número de diferentes parâmetros e tipos de parâmetros passados a eles. Isso é polimorfismo.
(3) Ao sobrecarregar, o nome do método deve ser o mesmo, mas o tipo de parâmetro e o número são diferentes e o tipo de valor de retorno pode ser o mesmo ou diferente. O tipo de retorno não pode ser usado como critérios de distinção para funções de sobrecarga.
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 sobrecarreghildExtends sobrecarregar {public void getPerson (Double Money) {System.out.println ("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.
Então vamos falar sobre a substituição (substituindo)
(1) O polimorfismo entre a classe pai e a classe infantil redefine as funções da classe pai. Se um método definido em uma subclasse tiver o mesmo nome e parâmetros que sua classe pai, dizemos que o método está substituindo. Em Java, as subclasses podem herdar métodos da classe pai sem reescrever o mesmo método.
Mas, às vezes, a subclasse não deseja herdar os métodos da classe pai intacta, mas quer fazer certas modificações, o que requer a reescrita do método.
A reescrita do método também é chamada de substituição do método.
(2) Se o método na subclasse tiver o mesmo nome de método, tipo de retorno e tabela de parâmetros como um método na classe pai, o novo método substituirá o método original.
Se você precisar do método original na classe pai, pode usar a palavra -chave Super, que se refere à classe pai da classe atual.
(3) as permissões de modificação de acesso das funções da subclasse não podem ser menores que as da classe pai;
Vamos dar uma olhada em um exemplo de substituição:
public }} classe pública Overidechild estende a substituição {@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.
Regras para métodos de reescrita:
1. A lista de parâmetros deve ser exatamente a mesma que o método que está sendo reescrito, caso contrário, não poderá ser chamado de reescrita, mas sobrecarregado.
2. O tipo retornado deve sempre ser o mesmo que o tipo de retorno do método substituído, caso contrário, não pode ser chamado de reescrita, mas sobrecarregado.
3. O limite do modificador de acesso deve ser maior que o modificador de acesso do método reescrito (público> protegido> padrão> privado)
4. O método de reescrita não deve lançar novas exceções de verificação ou exceções verificadas mais amplamente do que a declaração do método de reescrita. Por exemplo:
Um método da classe pai declara uma exceção de verificação da IOException. Ao reescrever esse método, você não pode lançar exceção, você pode apenas lançar uma exceção da subclasse da ioexception e poderá lançar exceções sem verificação.
E as regras para sobrecarga:
1. Deve ter listas de parâmetros diferentes;
2. Pode haver um tipo de retorno que não o repreenda, desde que a lista de parâmetros seja diferente;
3. Pode haver diferentes modificadores de acesso;
4. Exceções diferentes podem ser jogadas;
A diferença entre reescrita e sobrecarga é:
Reescrever trabalhos de polimorfismo, chamando métodos sobrecarregados pode reduzir bastante a quantidade de entrada de código. Desde que o mesmo nome de método passe diferentes parâmetros para ele, ele pode ter funções diferentes ou valores de retorno.
Se você usar bem a reescrita e a sobrecarga, poderá projetar uma classe com estrutura clara e concisa. Pode -se dizer que o papel de reescrever e sobrecarregar no processo de redação do código é extraordinário.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.