La identificación de tipo en tiempo de ejecución (RTTI) es un mecanismo muy útil en Java. RTTI mantiene información relacionada con la clase cuando Java se está ejecutando.
El polimorfismo se implementa en base a RTTI. Las funciones de RTTI son implementadas principalmente por la clase Class.
clase clase
La clase de clase es "clase de clases" (clase de clases). Si una clase es una abstracción y una colección de objetos, entonces la clase Clase es una abstracción y una colección de clases.
Cada objeto Class representa otra clase. Por ejemplo, en el siguiente programa, el objeto c1 de la clase Clase representa la clase Humana y c2 representa la clase Mujer.
Copie el código de código de la siguiente manera:
prueba de clase pública
{
principal vacío estático público (String [] argumentos)
{
Humano aPersona = nuevo Humano();
Clase c1 = aPerson.getClass();
System.out.println(c1.getName());
Humano otra Persona = nueva Mujer();
Clase c2 = otraPersona.getClass();
System.out.println(c2.getName());
}
}
claseHumano
{
/**
*accesor
*/
público int getHeight()
{
devolver esta altura;
}
/**
* mutador
*/
altura de crecimiento del vacío público (int h)
{
esta.altura = esta.altura + h;
}
altura interna privada;
}
clase Mujer extiende Humano
{
/**
* nuevo método
*/
nacimiento humano público ()
{
System.out.println("Dar a luz");
retorno (nuevo Humano());
}
}
Cuando llamamos al método getClass() del objeto, obtenemos una referencia al objeto Clase correspondiente.
En c2, incluso si convertimos la referencia del objeto Mujer a la referencia del objeto Humano, el objeto Clase al que apunta el objeto sigue siendo Mujer.
Cada objeto en Java tiene un objeto Clase correspondiente. Por lo tanto, podemos saber a qué clase pertenece "realmente" un objeto en cualquier momento a través del objeto Clase. No importa qué conversión de tipo realicemos en la referencia, el objeto de Clase correspondiente al objeto en sí es el mismo. Cuando llamamos a un método a través de una referencia, Java siempre puede encontrar el método definido en la clase Class correcta y ejecutar el código en la clase Class. Debido a la existencia de objetos Class, Java no se perderá debido a la conversión de tipos. Este es el principio del polimorfismo.
getClass: ¿Quién soy yo?
Además del método getClass(), tenemos otras formas de llamar objetos de la clase Class.
Copie el código de código de la siguiente manera:
prueba de clase pública
{
principal vacío estático público (String [] argumentos)
{
Clase c3 = Class.forName("Humano");
System.out.println(c1.getName());
Clase c4 = Mujer.clase
System.out.println(c2.getName());
}
}
Hay dos formas que se muestran arriba:
1. El método forName() recibe una cadena como parámetro, que es el nombre de la clase. Esto devolverá el objeto Clase correspondiente.
2. El método Woman.class llama directamente al miembro de la clase. Esto devolverá el objeto Clase correspondiente.
método de clase
El objeto Clase registra la información de la clase correspondiente, como el nombre de la clase, el paquete donde se encuentra la clase, etc. Podemos llamar al método correspondiente, como por ejemplo:
Copie el código de código de la siguiente manera:
getName() devuelve el nombre de la clase
getPackage() devuelve el paquete donde se encuentra la clase
Puede utilizar el método newInstance() del objeto Class para crear objetos de la clase correspondiente, como por ejemplo:
Copie el código de código de la siguiente manera:
Persona nueva humana = c1.newInstance();
newInstance() llama al método de compilación predeterminado sin parámetros.
Podemos obtener los miembros de la definición de clase:
Copie el código de código de la siguiente manera:
getFields() devuelve todos los miembros de datos públicos
getMethods() devuelve todos los métodos públicos
Las clases de análisis de reflexión se pueden utilizar más. No hay más detalles aquí.
Para conocer más métodos de la clase Class, consulte la documentación oficial:
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html
Carga de clase de clase
Cuando Java crea un objeto de una determinada clase, como un objeto de clase Humana, Java comprueba si hay un objeto de Clase correspondiente en la memoria.
Si no hay un objeto Clase correspondiente en la memoria, Java buscará la definición de la clase Humana en el archivo .class y cargará el objeto Clase de la clase Humana.
Una vez que el objeto Clase se carga correctamente, la creación y las operaciones relacionadas de otros objetos Humanos se referirán al objeto Clase.