Java Polimorfismo
Existem dois tipos de polimorfismo:
(1) Polimorfismo em tempo de compilação (polimorfismo em tempo de design): sobrecarga do método.
(2) Polimorfismo de tempo de execução: o sistema de tempo de execução Java decide qual método chama com base no tipo de instância que invocava o método, que é chamado de polimorfismo de tempo de execução. (As coisas sobre as quais geralmente falamos são o polimorfismo de tempo de execução, então o polimorfismo se refere principalmente ao polimorfismo de tempo de execução)
Três condições necessárias para a existência de polimorfismo em tempo de execução:
1. Deve haver herança (incluindo a implementação de interfaces);
2. Deve haver reescrita;
3. A classe dos pais aponta para o objeto de classe infantil.
Benefícios do polimorfismo:
1. Substituição. Os polimorfismos são intercambiáveis para os códigos existentes. Por exemplo, o polimorfismo funciona na classe Circle Circle e também funciona em qualquer outra geometria circular, como um círculo.
2. Extensibilidade. O polimorfismo é escalável para codificar. A adição de novas subclasses não afeta a operação e a operação dos polimorfismos das classes existentes, herança e outras características. De fato, é mais fácil obter funções polimórficas adicionando novas subclasses. Por exemplo, com base na realização do polimorfismo de cones, semicones e hemisférios, é fácil adicionar polimorfismos de esferas.
3. Capacidade de interface. O polimorfismo é alcançado por superclasses através de assinaturas de método, fornecendo uma interface comum às subclasses, e as subclasses são implementadas por subclasses para melhorá -lo ou substituí -lo. Como mostrado na Figura 8.3. Na figura, a forma da super classe especifica dois métodos de interface que implementam o polimorfismo, computea () e computeVolume (). Subclasses, como círculo e esfera, melhoram ou substituem esses dois métodos de interface para alcançar o polimorfismo.
4. Flexibilidade. Reflete operações flexíveis e diversas em aplicações e melhora a eficiência do uso.
5. Simplicidade. O polimorfismo simplifica o processo de redação e modificação de código do software de aplicativo, especialmente ao lidar com as operações e operações de um grande número de objetos, esse recurso é particularmente importante e importante.
Nota: A prioridade é de alta a baixa: this.show (o), super.show (o), this.show ((super) o), super.show ((super) o).
Perguntas relacionadas à entrevista:
classe a {public string show (d obj) .. {return ("a e d"); } public string show (um obj) .. {return ("a e a"); }} classe B estende um {public string show (b obj) .. {return ("b e b"); } public string show (um obj) .. {return ("b e a"); }} classe C estende B ... {} classe D estende B ... {}(2) Pergunta: Quais são os seguintes resultados de saída?
A1 = novo a ();
A2 = novo b ();
B b = novo b ();
C c = novo c ();
D d = novo d ();
System.out.println (a1.show (b)); ①
System.out.println (a1.show (c)); ②
System.out.println (a1.show (d)); ③
System.out.println (a2.show (b)); ④
System.out.println (a2.show (c)); ⑤
System.out.println (a2.show (d)); ⑥
System.out.println (B.Show (b)); ⑦
System.out.println (B.Show (C)); ⑧
System.out.println (b.show (d)); ⑨
(Iii) Resposta
① A e A
② A e A
③ A e D
④ B e A
⑤ B e A
⑥ A e D
⑦ B e B
⑧ B e B
⑨ A e D
analisar:
Ao fazer esse tipo de pergunta, você deve sempre usar a ordem de prioridade:
Para a pergunta um:
A1 é um objeto instanciado da Classe A, então isso aponta para A e, em seguida, procura isso.Show (B). Como não há método, ele vai para super.show (b). No entanto, como a classe A não tem superclasse, ela vai para isso.Show (Super B). Como a superclasse de B é A, é equivalente a isso.Show (a). Em seguida, esse método é encontrado na classe A, para que A e A sejam emitidos.
Para a pergunta 2:
Da mesma forma, A1 é um objeto instanciado da Classe A, então isso aponta para A e, em seguida, procure por esse. Método (c) na classe A. Como não existe esse método, eu vou para super.show (c). Desde que procuro isso na superclasse da classe A, mas a não tem uma superclasse, então eu vou a isso.Show (Super C). Como a superclasse de C é B, procuro esse método (b) na classe A e não o encontrei. Então B também possui uma superclasse, que é a, então procuro isso.Show (a), e eu a encontrei, então eu produzi A e A;
Para a pergunta 3:
Da mesma forma, A1 é um objeto instanciado da Classe A, então isso aponta para A e, em seguida, encontre esse.
Para a pergunta 4:
A2 é um objeto de referência da Classe B, com o Tipo A, então isso aponta para a Classe A e, em seguida, encontre esse. Como a classe A não tem uma superclasse, chega isso.Show (Super B). A superclasse de B é A, ou seja, super B = A, então execute esse método. Mostrar (a), procure o show (a) no método A e encontre -o, mas como A2 é um objeto de referência da classe B e a Classe B cobre o Método Show (a) da Classe A, a execução final do método Show (a) na classe B, ou seja, saída B e A;
Para a pergunta 5:
A2 é um objeto de referência da Classe B, com o Tipo A, então isso aponta para a Classe A e, em seguida, procura esse método (c) na classe A, mas não foi encontrado, por isso era o método super.show (c). Como a classe A não possui uma superclasse, é B, por isso é B, por isso é encontrada na classe A, mas não é encontrada. B também possui uma superclasse, ou seja, a, para continuar procurando o método do programa (a) na classe A e encontrado, mas porque A2 é um objeto de referência da classe B e a classe B cobre o método Show (a) da classe A, por isso é finalmente executado. O método Show (A) na classe B, ou seja, a saída de B e A;
Para a pergunta 6:
A2 é um objeto de referência da Classe B, com o Tipo A, então isso aponta para a Classe A e, em seguida, encontre esse método.Show (d) na classe A e o encontrou. No entanto, como A2 é um objeto de referência da Classe B, ele é encontrado na classe B, por isso é encontrado se existe algum método de Mostrar (D) na Classe B, por isso é executado. Portanto, o método do show (d) na classe A, ou seja, saída A e D;
Para a pergunta sete:
B é um objeto instanciado da classe B. O primeiro -ministro executa isso.Show (b), procura o método do show (b) na classe B, encontra -o e produz diretamente B e B;
Para a pergunta 8:
B é um objeto instanciado da classe B. O primeiro -ministro executa isso.Show (c) e procura o método Show (c) na classe B, mas não é encontrado; portanto, quando vou ao Super.Show (C), a superclasse de B é A, então quando procuro o método C) na classe A, mas não é encontrado, assim quando eu for. Mostrar (b) f Método F na Classe B, encontrei, então, quando executo o método SHOW (B) na classe B, a saída B e B;
Para a pergunta 9:
B é um objeto instanciado da classe B. O primeiro -ministro executa isso.Show (d), procura o método do programa (d) na classe B, mas não é encontrado, então fui ao Super.Show (d), e a superclasse de B é de classe A, então procuro o método (d) na classe A e eu o encontrei e a saída A e D;
Este é o método que resumi depois de ler as perguntas na internet. Espero que seja benéfico para todos.
Obrigado pela leitura, espero que isso possa ajudá -lo. Obrigado pelo seu apoio a este site!