Geneste klassen overnemen - 1

"Hallo Amigo!"

"Hallo Kim."

"Ik wil je vertellen over het erven van statische en niet-statische geneste klassen."

"Ik ben klaar."

"Er zijn echt geen problemen met het overnemen van statische geneste klassen. Ze worden overgenomen net als gewone klassen:"

Voorbeeld
public class Car
{
 public static class Door
 {

 }
}

public class LamborghiniDoor extends Car.Door
{
}

"Maar kunnen we statische geneste klassen statische geneste klassen in andere klassen laten erven?"

"Waarom niet?"

Voorbeeld
public class Car
{
 public static class Door
 {

 }
}

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

"Oké, begrepen. Ze zijn erfelijk, net als gewone lessen, toch?"

"Ja. Maar niet-statische geneste klassen (bekend als innerlijke klassen) worden niet zo gemakkelijk geërfd."

"Wanneer een instantie van een binnenklasse wordt gemaakt, wordt een verwijzing naar de buitenklasse opgeslagen en impliciet doorgegeven aan de constructor."

"Als gevolg hiervan, wanneer u objecten maakt van een klasse die een binnenklasse erft, moet u het vereiste buitenste object expliciet doorgeven."

"Zo ziet het eruit:"

Code
public class Car
{
 public class Door
 {

 }
}

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

"Je moet impliciet een Car-object doorgeven aan de Door-constructor. Dit gebeurt met een speciale constructie: «car.super()»."

"Trouwens, als je de LamborghiniDoor-constructor probeert te maken zonder parameters, wil het programma gewoon niet compileren. Een beetje vreemd, hè?"

"Ja, er zijn een paar nuances, maar het is geen rocket science."