"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ă”.
GO TO FULL VERSION