Nedarvning af indlejrede klasser - 1

"Hej, Amigo!"

"Hej Kim."

"Jeg vil gerne fortælle dig om nedarvning af statiske og ikke-statiske indlejrede klasser."

"Jeg er klar."

"Der er virkelig ingen problemer med at nedarve statiske indlejrede klasser. De nedarves ligesom almindelige klasser:"

Eksempel
public class Car
{
 public static class Door
 {

 }
}

public class LamborghiniDoor extends Car.Door
{
}

"Men kan vi få statiske indlejrede klasser til at arve statiske indlejrede klasser i andre klasser?"

"Hvorfor ikke?"

Eksempel
public class Car
{
 public static class Door
 {

 }
}

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

"OK, forstået. De er nedarvet ligesom almindelige klasser, ikke?"

"Ja. Men ikke-statiske indlejrede klasser (kendt som indre klasser) nedarves ikke så let."

"Når en instans af en indre klasse oprettes, gemmes en reference til dens ydre klasse og videregives implicit til konstruktøren."

"Som et resultat, når du opretter objekter af en klasse, der arver en indre klasse, skal du udtrykkeligt videregive det påkrævede ydre objekt."

"Sådan ser det ud:"

Kode
public class Car
{
 public class Door
 {

 }
}

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

"Du skal implicit videregive et bilobjekt til dørkonstruktøren. Dette gøres ved hjælp af en speciel konstruktion: «car.super()»."

"Forresten, hvis du forsøger at skabe LamborghiniDoor-konstruktøren uden nogen parametre, vil programmet simpelthen ikke kompilere. Lidt mærkeligt, hva?"

"Ja, der er et par nuancer, men det er ikke raketvidenskab."