"Cześć, Amigo!"
– Cześć, Kim.
„Chcę opowiedzieć o dziedziczeniu statycznych i niestatycznych klas zagnieżdżonych”.
"Jestem gotowy."
„Naprawdę nie ma żadnych problemów z dziedziczeniem statycznych klas zagnieżdżonych. Są one dziedziczone tak jak zwykłe klasy:”
public class Car
{
public static class Door
{
}
}
public class LamborghiniDoor extends Car.Door
{
}
„Ale czy możemy sprawić, by statycznie zagnieżdżone klasy dziedziczyły statyczne klasy zagnieżdżone w innych klasach?”
"Dlaczego nie?"
public class Car
{
public static class Door
{
}
}
public class Lamborghini extends Car
{
public static class LamborghiniDoor extends Car.Door
{
}
}
„OK, rozumiem. Są dziedziczone tak jak zwykłe klasy, prawda?”
„Tak. Ale niestatyczne klasy zagnieżdżone (znane jako klasy wewnętrzne) nie są tak łatwo dziedziczone”.
„Kiedy tworzona jest instancja klasy wewnętrznej, odniesienie do jej klasy zewnętrznej jest przechowywane i niejawnie przekazywane do konstruktora”.
„W rezultacie, kiedy tworzysz obiekty klasy, która dziedziczy klasę wewnętrzną, musisz jawnie przekazać wymagany obiekt zewnętrzny”.
„Tak to wygląda:”
public class Car
{
public class Door
{
}
}
public class LamborghiniDoor extends Car.Door
{
LamborghiniDoor(Car car)
{
car.super();
}
}
„Musisz niejawnie przekazać obiekt Car do konstruktora Door. Odbywa się to za pomocą specjalnej konstrukcji: «car.super()».”
„Nawiasem mówiąc, jeśli spróbujesz stworzyć konstruktor LamborghiniDoor bez żadnych parametrów, program po prostu się nie skompiluje. Trochę dziwne, co?”
„Tak, jest kilka niuansów, ale to nie jest fizyka jądrowa”.
GO TO FULL VERSION