"Bună, Amigo!"
— Bună, Kim.
„Vreau să vă spun despre moștenirea claselor imbricate statice și non-statice.”
"Sunt gata."
„Nu există într-adevăr probleme cu moștenirea claselor imbricate statice. Acestea sunt moștenite la fel ca și clasele obișnuite:”
public class Car
{
public static class Door
{
}
}
public class LamborghiniDoor extends Car.Door
{
}
„Dar putem face ca clasele imbricate statice să moștenească clase imbricate statice în alte clase?”
"De ce nu?"
public class Car
{
public static class Door
{
}
}
public class Lamborghini extends Car
{
public static class LamborghiniDoor extends Car.Door
{
}
}
"OK, am înțeles. Sunt moștenite la fel ca și cursurile obișnuite, nu?"
"Da. Dar clasele imbricate non-statice (cunoscute ca clase interioare) nu sunt moștenite la fel de ușor."
„Când este creată o instanță a unei clase interioare, o referință la clasa sa exterioară este stocată și implicit transmisă constructorului.”
„Ca urmare, atunci când creați obiecte dintr-o clasă care moștenește o clasă interioară, trebuie să transmiteți obiectul exterior necesar în mod explicit.”
„Așa arată:”
public class Car
{
public class Door
{
}
}
public class LamborghiniDoor extends Car.Door
{
LamborghiniDoor(Car car)
{
car.super();
}
}
"Trebuie să treceți implicit un obiect Car către constructorul Door. Acest lucru se face folosind un construct special: «car.super()»."
"Apropo, dacă încerci să creezi constructorul LamborghiniDoor fără niciun parametru, programul pur și simplu nu se va compila. Puțin ciudat, nu?"
„Da, există câteva nuanțe, dar nu este știință rachetă”.