Heredar clases anidadas - 1

"¡Hola, amigo!"

"Hola Kim."

"Quiero hablarles sobre la herencia de clases anidadas estáticas y no estáticas".

"Estoy listo."

"Realmente no hay ningún problema con la herencia de clases anidadas estáticas. Se heredan como las clases regulares:"

Ejemplo
public class Car
{
 public static class Door
 {

 }
}

public class LamborghiniDoor extends Car.Door
{
}

"Pero, ¿podemos hacer que las clases anidadas estáticas hereden clases anidadas estáticas en otras clases?"

"¿Por qué no?"

Ejemplo
public class Car
{
 public static class Door
 {

 }
}

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

"Está bien, lo tengo. Se heredan como las clases normales, ¿verdad?"

"Sí. Pero las clases anidadas no estáticas (conocidas como clases internas) no se heredan tan fácilmente".

"Cuando se crea una instancia de una clase interna, se almacena una referencia a su clase externa y se pasa implícitamente al constructor".

"Como resultado, cuando crea objetos de una clase que hereda una clase interna, debe pasar explícitamente el objeto externo requerido".

"Así es como se ve:"

Código
public class Car
{
 public class Door
 {

 }
}

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

"Debes pasar implícitamente un objeto Car al constructor Door. Esto se hace usando una construcción especial: «car.super()»."

"Por cierto, si intentas crear el constructor LamborghiniDoor sin ningún parámetro, el programa simplemente no se compilará. Un poco extraño, ¿eh?"

"Sí, hay un par de matices, pero no es ciencia espacial".