Beágyazott osztályok öröklése – 1

– Szia Amigo!

– Szia, Kim.

"Szeretnék mesélni a statikus és nem statikus beágyazott osztályok örökléséről."

"Készen állok."

"Valójában nincs probléma a statikus beágyazott osztályok öröklésével. Ezek ugyanúgy öröklődnek, mint a normál osztályok:"

Példa
public class Car
{
 public static class Door
 {

 }
}

public class LamborghiniDoor extends Car.Door
{
}

"De megtehetjük, hogy a statikus beágyazott osztályok örököljék más osztályok statikus beágyazott osztályait?"

"Miért ne?"

Példa
public class Car
{
 public static class Door
 {

 }
}

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

"Rendben, értem. Ugyanúgy öröklődnek, mint a normál osztályok, igaz?"

"Igen. De a nem statikus beágyazott osztályok (az úgynevezett belső osztályok) nem öröklődnek olyan könnyen."

"Amikor egy belső osztály példányát létrehozzák, a külső osztályra való hivatkozás tárolódik, és implicit módon átadásra kerül a konstruktornak."

"Ennek eredményeként, ha egy belső osztályt öröklő osztály objektumait hoz létre, akkor kifejezetten át kell adnia a szükséges külső objektumot."

"Így néz ki:"

Kód
public class Car
{
 public class Door
 {

 }
}

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

"A Car objektumot implicit módon át kell adnia az ajtó konstruktorának. Ez egy speciális konstrukcióval történik: «car.super()»."

"Mellesleg, ha megpróbálja létrehozni a LamborghiniDoor konstruktort minden paraméter nélkül, a program egyszerűen nem fog lefordítani. Kicsit furcsa, mi?"

– Igen, van egy-két árnyalat, de ez nem rakétatudomány.