Hay dos tipos de polimorfismo:
1) Al compilar, el polimorfismo para múltiples métodos del mismo nombre, si puede determinar cuál del método para ejecutar el mismo nombre durante la compilación, se llama polimorfismo al compilar.
2) Si el polimorfismo no se determina durante la compilación, solo puede determinar cuál del método del mismo nombre durante el tiempo de ejecución se llama polimorfismo en el momento del tiempo de ejecución.
El método cubre dos tipos de polimorfismo.
Xxxx x1 = nuevo xxxx (lista de parámetros);
Xxx xx1 = nuevo xxx (lista de parámetros);
x1.tstring ();
xx1.tstring ();
Xxxx es la clase principal de xxx.
Dado que el sub -objeto no es solo un objeto principal, el objeto de clase principal y el objeto de subclass se asignan compatibilidad, y el objeto de clase principal puede asignarse como un objeto de subclass.
Xxxx x2 = nuevo xxx (lista de parámetros);
x2.ToString ();
La instrucción X2 es una instancia de la clase principal pero obtiene la subclass XXX.
Estos se dividen en dos casos:
Dependiendo de si la subclase cubre el método principal.
Si no hay cobertura, se ejecuta el método principal.
Al compilarse, de acuerdo con la clase del objeto, el sistema no puede determinar el método que debe ejecutarse al final, y solo se puede determinar cuando el tiempo de ejecución, por lo que esto es polimorfo en tiempo de ejecución.
La clase principal no ejecuta todos los métodos de subclase, y solo puede ejecutar el método de subclases cubierto en esas clases/subclases principales.
Implementación del polimorfismo de Java
El polimorfismo de Java y C ++ se realizan mediante unión o unión dinámica en tiempo de ejecución. Al llamar a un método a referenciado por un objeto, porque el compilador no sabe si esta referencia apunta al objeto tipo explicado durante la instrucción variable, o el objeto de la subclase de tipo. Por lo tanto, el compilador no puede estar vinculado a un método específico para esta llamada. Solo el reconocimiento de tipo (RTT) se ejecuta a través de Java (RTT) está vinculado al método específico en tiempo de ejecución
La revisión de la reescritura y la sobrecarga de carga del método es una manifestación diferente del polimorfismo de Java. La anulación de control es un polimorfismo entre el padre y la subclase, y la sobrecarga de carga es una manifestación de polimorfismo de una clase.
Dar un ejemplo específico:
Class People {public string toString () {return "I Am a People!"; };} Class Girl extiende a las personas {public String toString () {return "I Am A Girl!" Public void Sing () {}; []) {peical p = new Girl ();
Ejecute el resultado:
¡Soy una niña!
P es una referencia a las personas, pero porque es un objeto de niña en Runt
En la comprensión del polimorfismo de Java
Descargo de responsabilidad, el ejemplo de otros compañeros de clase aquí, el enlace original: http://blog.csdn.net/thinkghoster/article/details/2307001
Tema de prueba
Clase A {Public String Show (D Obj) {return "A y D";} String public Show (A OBJ) {return "A Are"; ) {Return "b y a";} La clase C se extiende B {} La clase D se extiende B {} public static void main (st rags []) {a a1 = new a (); b = nuevo B (); ); )); c));
Respuesta
A y AA y AA y DB y AB y AA y DB y BB y BA y D
Análisis comencé a hacer este tema.
En primer lugar, debemos comprender profundamente la reescritura y la sobrecarga.
En segundo lugar, en una comprensión profunda de esta oración, "Cuando el objeto de la súper clase hace referencia a las variables de los objetos de subclase de referencia, el tipo de objeto de referencia en lugar de variables de referencia determina cuyo método miembro, pero este método de llamada debe estar en la súper clase. se define en él, es decir, el método de reescribir por la subclass ""
Entonces, analicemos estas preguntas
Pregunta: ¿Crees que B reescribió el método del programa de Padre A? Si lo reescribes, ¿cuántos reescritos?
Respuesta: reescrito, reescrito uno, es decir, programa de cadenas públicas (A OBJ), ¿por qué es Public String Show (B OBJ)?
Análisis de ejemplo
Después de leer el análisis anterior, también analizamos dos ejemplos:
1. A2.show (b):
A2 es una variable de referencia, el tipo A, B es una instancia de B. En primer lugar, encuentre el programa (b obj) en una clase A, pero no lo encontró. Así que lo encontré en la súper clase de A, y A no tenía una súper clase, así que recurrí a A.HIS ((Super) B), (Super) B como A, por lo que se encontró el método de mostrar (un OBJ) en A, pero debido a un objeto de clase B a la que se hace referencia a A2, B reescrita el método de show A (A OBJ), por lo que finalmente está bloqueado al programa (A OBJ) de la Clase B, la salida es "B y A".
2. A2.Show (C):
A2 es una variable de referencia, el tipo A, B es una instancia de B. En primer lugar, encuentre el programa (C OBJ) en una Clase A, pero no lo encontró. Así que lo encontré en la súper categoría de A, y A no tenía una súper clase, así que recurrí a A.HIS ((Super) C), (Super) C como B. Hasta ahora, esto A2.Show (C) ha Conviértete en A2 A2 El problema de .show (b), y a2.show (b) se ha analizado como la salida "b y a", por lo que aquí también se produce "b y a"