[JavaSE coluna 59] O conceito e a prioridade da reescrita de métodos, mecanismo de polimorfismo orientado a objetos

Página inicial do autor : Designer Xiao Zheng
Breve introdução do autor : 3 anos de experiência em desenvolvimento JAVA full-stack, com foco em tecnologia JAVA, personalização de sistema, orientação remota, dedicado à transformação digital corporativa, professor certificado do CSDN College e Blue Bridge Cloud Course.
Direção principal : Vue, SpringBoot, miniaplicativo WeChat

Este artigo explica o conceito e a prioridade da regravação de método em Java e fornece um código de amostra.

1. O que é reescrita de método

A substituição de método é um mecanismo para obter polimorfismo em Java . Quando uma subclasse herda de uma classe pai, a subclasse pode substituir os métodos existentes na classe pai para implementar sua própria lógica ou comportamento específico. A substituição de método requer que o método na subclasse tenha o mesmo nome de método, lista de parâmetros e tipo de retorno que o método substituído na superclasse.

As características da reescrita do método são as seguintes 4 4Às 4 horas, por favor, estude bastante.

  1. Um método substituído em uma subclasse deve ter a mesma assinatura de método que o método substituído na superclasse.
  2. Os modificadores de acesso de um método de substituição não podem ser mais restritivos do que os modificadores de acesso do método substituído. Por exemplo, se o método da classe pai for public, o método substituído pela subclasse também deverá ser public.
  3. Um método de substituição não pode declarar exceções mais amplas do que o método substituído, mas pode declarar exceções mais restritas ou não gerar exceções.
  4. Um método de substituição não pode usar um modificador de acesso mais restrito do que o método substituído, por exemplo, se o método da superclasse for protected, então o método substituído da subclasse pode ser protectedou public, mas não private.

O objetivo da reescrita de métodos é que, no relacionamento de herança, as subclasses possam personalizar os métodos da classe pai de acordo com suas próprias necessidades para obter funções mais flexíveis e específicas. O método de reescrita determinará dinamicamente qual método chamar em tempo de execução. Recursos polimórficos implementados .

insira a descrição da imagem aqui


Em segundo lugar, por que você precisa usar a reescrita de método

A principal razão para usar a substituição de método em Java é obter polimorfismo e flexibilidade de código .

  1. Polimorfismo : A reescrita do método é um dos meios importantes para alcançar o polimorfismo. Quando a subclasse herda a classe pai e reescreve o método da classe pai, ela pode apontar para o objeto da subclasse por meio da referência da classe pai e chamar o método reescrito correspondente de acordo com o tipo de objeto real. Isso permite que o programa se comporte de maneira diferente dependendo do objeto em tempo de execução.
  2. Flexibilidade : a reescrita de métodos permite que as subclasses personalizem os métodos da classe pai de acordo com suas próprias necessidades. As subclasses podem reescrever métodos de classe pai para obter funções específicas de acordo com necessidades de negócios específicas. Isso pode melhorar a flexibilidade e a escalabilidade do código, tornando o programa mais fácil de manter e expandir.

Além disso, a reescrita do método também pode melhorar a legibilidade e compreensão do código.Ao reescrever o método da classe pai na subclasse, o código pode ser mais semântico e lógico, tornando o programa mais fácil de entender.

Resumindo, a reescrita de métodos é um meio importante para alcançar o polimorfismo, melhorar a flexibilidade e a legibilidade do código, tornando os programas Java mais flexíveis, escaláveis ​​e fáceis de entender.

insira a descrição da imagem aqui


3. Problema de prioridade de reescrita de método

Em Java, a prioridade da substituição do método é baseada no relacionamento de herança .

Se a subclasse substituir o método da classe pai, o método substituído na subclasse será chamado primeiro ao chamar o método.

O seguinte é um código de amostra simples para ilustrar a prioridade da reescrita do método, por favor, estude com cuidado.

class Animal {
    
    
    public void makeSound() {
    
    
        System.out.println("Animal makes sound");
    }
}

class Dog extends Animal {
    
    
    @Override
    public void makeSound() {
    
    
        System.out.println("Dog barks");
    }
}

public class Main {
    
    
    public static void main(String[] args) {
    
    
        Animal animal = new Animal();
        animal.makeSound();  // Output: "Animal makes sound"

        Dog dog = new Dog();
        dog.makeSound();  // Output: "Dog barks"

        Animal animal2 = new Dog();
        animal2.makeSound();  // Output: "Dog barks"
    }
}

No exemplo acima, a classe Animal tem um makeSound()método, e a classe Dog herda da classe Animal e substitui makeSound()o método. No main()método, criamos os objetos da classe Animal e da classe Dog, respectivamente, e chamamos o makeSound()método deles.

Quando animalo objeto chama makeSound()o método, ele chama o método na classe Animal makeSound(), output Animal makes sound.

Quando dogo objeto chama makeSound()o método, ele chama o makeSound()método substituído na classe Dog, output Dog barks.

Quando animal2o objeto (uma variável de referência do tipo Animal, apontando para um objeto do tipo Dog) chamar makeSound()o método, devido às características do polimorfismo, ele também chamará o makeSound()método sobrescrito na classe Dog, saída Dog barks.

Isso mostra que na reescrita do método, a chamada do método é baseada no tipo real do objeto, não no tipo da variável, então o método reescrito pela subclasse será chamado primeiro.

insira a descrição da imagem aqui


4. Método de reescrita de perguntas de entrevista

  1. O que é substituição de método? Por favor, dê um exemplo.
  2. Qual é a diferença entre substituição de método e sobrecarga de método?
  3. Quais são as regras para substituição de método?
  4. Se o método da classe pai for private, ele pode ser substituído pela subclasse?
  5. Se uma subclasse substitui um método de classe pai, ela pode lançar exceções mais amplas do que a declaração do método de classe pai?
  6. Um método estático de uma classe pai pode ser substituído por uma subclasse?
  7. Se o método da classe pai for final, ele pode ser substituído pela subclasse?
  8. Ao chamar um método substituído, você chama o método da classe pai ou o método da subclasse?
  9. O método substituído da subclasse pode ser chamado na classe pai?
  10. Qual é a relação entre substituição de método e polimorfismo?

V. Resumo

Este artigo explica o conceito e a prioridade da reescrita de métodos em Java e fornece exemplos de código.No próximo blog, explicarei os pontos de conhecimento dos blocos de código estáticos em Java.

insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/qq_41464123/article/details/131990867
Recomendado
Clasificación