L'identification des types d'exécution (RTTI) est un mécanisme très utile en Java. RTTI conserve les informations relatives aux classes lorsque Java est en cours d'exécution.
Le polymorphisme est implémenté sur la base du RTTI. Les fonctions de RTTI sont principalement implémentées par la classe Class.
Classe de classe
La classe classe est "classe de classes" (classe de classes). Si une classe est une abstraction et une collection d’objets, alors la classe Class est une abstraction et une collection de classes.
Chaque objet Class représente une autre classe. Par exemple, dans le programme suivant, l'objet c1 de la classe Class représente la classe Human et c2 représente la classe Woman.
Copiez le code comme suit :
Test de classe publique
{
public static void main (String[] arguments)
{
Humain aPerson = new Human();
Classe c1 = aPerson.getClass();
System.out.println(c1.getName());
Humain anotherPerson = new Woman();
Classe c2 = anotherPerson.getClass();
System.out.println(c2.getName());
}
}
classeHumain
{
/**
*accesseur
*/
public int getHeight()
{
renvoie this.height;
}
/**
* mutateur
*/
public void growHeight (int h)
{
ceci.hauteur = ceci.hauteur + h;
}
hauteur int privée ;
}
classe Femme étend Humain
{
/**
* nouvelle méthode
*/
public Humain giveBirth()
{
System.out.println("Accoucher");
return (nouveau Humain());
}
}
Lorsque nous appelons la méthode getClass() de l'objet, nous obtenons une référence à l'objet Class correspondant.
En c2, même si nous convertissons la référence de l'objet Women en référence de l'objet Human, l'objet Class pointé par l'objet est toujours Woman.
Chaque objet en Java a un objet Class correspondant. Par conséquent, nous pouvons connaître à tout moment la classe à laquelle un objet appartient "réellement" via l'objet Class. Quelle que soit la conversion de type que nous effectuons sur la référence, l'objet Class correspondant à l'objet lui-même est le même. Lorsque nous appelons une méthode via une référence, Java peut toujours trouver la méthode définie dans la bonne classe Class et exécuter le code dans la classe Class. En raison de l'existence d'objets Class, Java ne sera pas perdu à cause de la conversion ascendante de type. C'est le principe du polymorphisme.
getClass : Qui suis-je ?
En plus de la méthode getClass(), nous disposons d’autres moyens d’appeler des objets de la classe Class.
Copiez le code comme suit :
Test de classe publique
{
public static void main (String[] arguments)
{
Classe c3 = Class.forName("Humain");
System.out.println(c1.getName());
Classe c4 = Femme.classe
System.out.println(c2.getName());
}
}
Il existe deux manières indiquées ci-dessus :
1. La méthode forName() reçoit une chaîne en paramètre, qui est le nom de la classe. Cela renverra l’objet Class correspondant.
2. La méthode Woman.class appelle directement le membre de la classe. Cela renverra l’objet Class correspondant.
Méthode de classe
L'objet Class enregistre les informations de la classe correspondante, comme le nom de la classe, le package dans lequel se trouve la classe, etc. On peut appeler la méthode correspondante, telle que :
Copiez le code comme suit :
getName() renvoie le nom de la classe
getPackage() renvoie le package où se trouve la classe
Vous pouvez utiliser la méthode newInstance() de l'objet Class pour créer des objets de la classe correspondante, tels que :
Copiez le code comme suit :
Humain newPerson = c1.newInstance();
newInstance() appelle la méthode de construction par défaut sans paramètres.
Nous pouvons obtenir la définition des membres de la classe :
Copiez le code comme suit :
getFields() renvoie tous les membres de données publiques
getMethods() renvoie toutes les méthodes publiques
Les cours d'analyse de réflexion peuvent être davantage utilisés. Pas plus de détails ici.
Pour plus de méthodes de la classe Class, veuillez consulter la documentation officielle :
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html
Chargement de classe
Lorsque Java crée un objet d'une certaine classe, comme un objet de classe Human, Java vérifie s'il existe un objet Class correspondant dans la mémoire.
S'il n'y a pas d'objet Class correspondant dans la mémoire, Java recherchera la définition de la classe Human dans le fichier .class et chargera l'objet Class de la classe Human.
Une fois l’objet Class chargé avec succès, la création et les opérations associées d’autres objets Human feront référence à l’objet Class.