– 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:"
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?"
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:"
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.
GO TO FULL VERSION