Héritage des classes imbriquées - 1

« Salut Amigo ! »

"Salut, Kim."

"Je veux vous parler de l'héritage de classes imbriquées statiques et non statiques."

"Je suis prêt."

"Il n'y a vraiment aucun problème avec l'héritage de classes imbriquées statiques. Elles sont héritées comme des classes normales :"

Exemple
public class Car
{
 public static class Door
 {

 }
}

public class LamborghiniDoor extends Car.Door
{
}

"Mais pouvons-nous faire en sorte que les classes imbriquées statiques héritent des classes imbriquées statiques dans d'autres classes?"

"Pourquoi pas?"

Exemple
public class Car
{
 public static class Door
 {

 }
}

public class Lamborghini extends Car
{
 public static class LamborghiniDoor extends Car.Door
 {
 }
}

"OK, j'ai compris. Ils sont hérités comme les cours normaux, n'est-ce pas ?"

"Oui. Mais les classes imbriquées non statiques (appelées classes internes) ne sont pas héritées aussi facilement."

"Lorsqu'une instance d'une classe interne est créée, une référence à sa classe externe est stockée et implicitement transmise au constructeur."

"Par conséquent, lorsque vous créez des objets d'une classe qui hérite d'une classe interne, vous devez transmettre explicitement l'objet externe requis."

"Voilà à quoi ça ressemble :"

Code
public class Car
{
 public class Door
 {

 }
}

public class LamborghiniDoor extends Car.Door
{
 LamborghiniDoor(Car car)
 {
  car.super();
 }
}

"Vous devez passer implicitement un objet Car au constructeur Door. Cela se fait à l'aide d'une construction spéciale : "car.super()"."

« Au fait, si vous essayez de créer le constructeur LamborghiniDoor sans aucun paramètre, le programme ne se compilera tout simplement pas. Un peu étrange, hein ?

"Ouais, il y a quelques nuances, mais ce n'est pas sorcier."