Copiez le code comme suit :
classe publique Test4 {
@Test
test de vide public(){
enfant enfant = nouvel enfant ();
}
}
parent de classe{
public static String parentStaticField = "Variable statique de classe parent";
public String parentNormalField = "Variable normale de classe parent";
statique {
System.out.println(parentStaticField);
System.out.println("Bloc statique de classe parent");
}
{
System.out.println(parentNormalField);
System.out.println("Bloc ordinaire de classe parent");
}
parent public(){
System.out.println("Constructeur de classe parent");
}
}
l'enfant de classe étend le parent{
public static String childStaticField = "Variable statique de sous-classe";
public String childNormalField = "Variable normale de sous-classe";
statique {
System.out.println(childStaticField);
System.out.println("Bloc statique de sous-classe");
}
{
System.out.println(childNormalField);
System.out.println("Bloc ordinaire de sous-classe");
}
enfant public(){
System.out.println("Constructeur de sous-classe");
}
}
Sortir:
Copiez le code comme suit :
variable statique de classe parent
bloc statique de classe parent
Variables statiques de sous-classe
bloc statique de sous-classe
Variable ordinaire de classe parent
Blocage normal de la classe parent
Constructeur de classe parent
Variables ordinaires de sous-classe
Bloc normal de sous-classe
Constructeur de sous-classe
Processus d'exécution :
1. Lors de l'exécution d'un nouvel enfant, le chargeur recherche le code de la classe enfant compilée (c'est-à-dire le fichier child.class). Pendant le processus de chargement, le chargeur remarque qu'il possède une classe de base et charge donc à nouveau la classe de base. Ce processus se produira toujours, que vous créiez ou non un objet de classe de base. Si la classe de base a une autre classe de base, alors la deuxième classe de base sera également chargée, et ainsi de suite.
2. Effectuez l'initialisation statique de la classe de base racine, puis l'initialisation statique de la classe dérivée suivante, et ainsi de suite. Cet ordre est très important, car « l’initialisation statique » de la classe dérivée peut dépendre de l’initialisation correcte des membres de la classe de base.
3. Lorsque toutes les classes nécessaires ont été chargées, créez un objet classe enfant.
4. Si la classe enfant a une classe parent, alors le constructeur de la classe parent est appelé. Vous pouvez utiliser super pour spécifier le constructeur à appeler.
Le processus de construction et la séquence de construction de la classe de base sont les mêmes que ceux de la classe dérivée. Tout d’abord, chaque variable de la classe de base est initialisée dans un ordre littéral, puis le reste du constructeur de la classe de base est exécuté.
5. Initialisez les données des membres de la sous-classe dans l'ordre dans lequel elles sont déclarées et exécutez le reste du constructeur de sous-classe.