Polimorfismo de Java
Hay dos tipos de polimorfismo:
(1) polimorfismo de tiempo de compilación (polimorfismo de tiempo de diseño): sobrecarga de métodos.
(2) Polimorfismo de tiempo de ejecución: el sistema de tiempo de ejecución de Java decide qué método llamar en función del tipo de instancia que invoca el método, que se llama polimorfismo de tiempo de ejecución. (Las cosas de las que solemos hablar son el polimorfismo de tiempo de ejecución, por lo que el polimorfismo se refiere principalmente al polimorfismo de tiempo de ejecución)
Tres condiciones necesarias para la existencia de polimorfismo en tiempo de ejecución:
1. Debe haber herencia (incluida la implementación de interfaces);
2. Debe haber reescritura;
3. La clase de referencia de la clase principal al objeto de clase infantil.
Beneficios del polimorfismo:
1. Sustitutabilidad. Los polimorfismos son intercambiables para los códigos existentes. Por ejemplo, el polimorfismo funciona en la clase Circle Circle y también funciona en cualquier otra geometría circular, como un círculo.
2. Extensibilidad. El polimorfismo es escalable para el código. Agregar nuevas subclases no afecta la operación y el funcionamiento de los polimorfismos, la herencia y otras características de las clases existentes. De hecho, es más fácil obtener funciones polimórficas agregando nuevas subclases. Por ejemplo, sobre la base de realizar el polimorfismo de conos, semiconas y hemisferios, es fácil agregar polimorfismos de esferas.
3. Ipabilidad de interfaz. El polimorfismo se logra mediante superclase a través de firmas de métodos, proporcionando una interfaz común para las subclases, y las subclases implementan subclases para mejorarla o sobrescribirlo. Como se muestra en la Figura 8.3. En la figura, la forma de súper clase especifica dos métodos de interfaz que implementan polimorfismo, computearea () y computeVolume (). Las subclases, como el círculo y la esfera, mejoran o anulan estos dos métodos de interfaz para lograr el polimorfismo.
4. Flexibilidad. Refleja operaciones flexibles y diversas en aplicaciones y mejora la eficiencia del uso.
5. Simplicidad. El polimorfismo simplifica el proceso de escritura y modificación de código del software de aplicación, especialmente cuando se trata de las operaciones y operaciones de una gran cantidad de objetos, esta característica es particularmente prominente e importante.
Nota: La prioridad es de alta a baja: this.show (o), super.show (o), this.show ((super) o), super.show ((super) o).
Preguntas relacionadas con la entrevista:
Clase A {Public String Show (D Obj) .. {return ("a y d"); } programa de cadena pública (un obj) .. {return ("a and a"); }} La clase B extiende un {show de cadena pública (b obj) .. {return ("b y b"); } Show de cadena pública (a OBJ) .. {return ("B y A"); }} La clase C se extiende B ... {} La clase D se extiende B ... {}(2) Pregunta: ¿Cuáles son los siguientes resultados de salida?
A a1 = nuevo a ();
A a2 = nuevo B ();
B b = nuevo b ();
C c = nuevo c ();
D d = nuevo 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) Respuesta
① A y A
② A y A
③ A y D
④ B y A
⑤ B y A
⑥ A y D
⑦ B y B
⑧ B y B
⑨ A y D
analizar:
Al hacer este tipo de pregunta, siempre debe usar el orden de prioridad:
Para la pregunta uno:
A1 es un objeto instanciado de la Clase A, por lo que esto apunta a A, y luego busca esto. Show (B). Dado que no hay método, va a Super.show (b). Sin embargo, dado que la Clase A no tiene superclase, va a esto. Show (Super B). Como la superclase de B es A, es equivalente a esto. Show (a). Luego, este método se encuentra en la clase A, por lo que A y A son salidas.
Para la pregunta 2:
Del mismo modo, A1 es un objeto instanciado de la Clase A, por lo que esto apunta a A, y luego busca este método. Show (C) en la clase A. Dado que no hay tal método, voy a Super.Show (C). Desde que busco esto en la superclase de la Clase A, pero A no tiene una superclase, así que voy a esto. Mhow (Super C). Dado que la superclase de C es B, busco este método. Tjloqueo (b) en la Clase A, y no lo encontré. Entonces B también tiene una superclase, que es A, así que busco esto. Muestra (a), y lo encontré, así que salgo A y A;
Para la pregunta 3:
Del mismo modo, A1 es un objeto instanciado de la clase A, por lo que esto apunta a A, y luego encuentre este método.
Para la pregunta 4:
A2 es un objeto de referencia de la clase B, con el tipo A, por lo que esto apunta a la Clase A, y luego encuentre este método. Como la Clase A no tiene una superclase, llega esto. Show (Super B). La superclase de B es A, es decir, Super B = A, así que ejecute este método. Show (a), busque el programa (a) en el método A, y busque, pero dado que A2 es un objeto de referencia de la clase B, y la clase B cubre el programa (a) Método de la Clase A, la ejecución final del Método Show (A) en la Clase B, es decir, la salida B y A;
Para la pregunta 5:
A2 es un objeto de referencia de la Clase B, con el tipo A, por lo que esto apunta a la Clase A, y luego busca este método. Show (C) en la Clase A, pero no se encontró, por lo que fue el método Super.Show (C). Dado que la clase A no tiene una superclase, es B, por lo que es B, por lo que se encuentra en la Clase A, pero no se encuentra. B también tiene una superclase, es decir, A, por lo que continúa buscando el método del programa (A) en la Clase A, y se encuentra, pero debido a que A2 es un objeto de referencia de la Clase B, y la Clase B cubre el Método del Show (A) de la Clase A, por lo que finalmente se ejecuta. El método del programa (a) en la clase B, es decir, la salida de B y A;
Para la pregunta 6:
A2 es un objeto de referencia de la clase B, con el tipo A, por lo que esto apunta a la Clase A, y luego encuentre este método. Show (D) en la Clase A, y lo encontró. Sin embargo, dado que A2 es un objeto de referencia de la clase B, se encuentra en la clase B, por lo que se encuentra si hay algún método de espectáculo anulado (D) en la clase B, por lo que se ejecuta. Entonces el método Show (D) en la Clase A, es decir, la salida A y D;
Para la pregunta siete:
B es un objeto instanciado de la clase B. El Primer Ministro ejecuta esto. Show (b), busca el método del programa (b) en la clase B, lo encuentra y sale directamente B y B;
Para la pregunta 8:
b es un objeto instanciado de la clase B. El Primer Ministro ejecuta esto. Show (c), y busca el método del programa (c) en la clase B, pero no se encuentra, por lo que cuando voy a super.show (c), la superclase de B es A, así que cuando busco el método del programa (c) en la clase A, pero no se encuentra, así que cuando voy a esto. Show (b) F Método F En la clase B, lo encuentro, así que cuando ejecuto el método Show (B) en la clase B, I salida B y B;
Para la pregunta 9:
B es un objeto instanciado de la Clase B. El Primer Ministro ejecuta esto. Show (D), busca el método del programa (d) en la clase B, pero no se encuentra, así que fui a Super.Show (D), y la superclase de B es la clase A, por lo que busco el método del programa (d) en la Clase A, y lo encontré, y la salida A y D;
Este es el método que he resumido después de leer las preguntas en Internet. Espero que sea beneficioso para todos.
Gracias por leer, espero que pueda ayudarte. ¡Gracias por su apoyo para este sitio!