— Привіт, Аміго!
— Привіт, Кім.
— Я хочу розповісти тобі про успадкування внутрішніх та вкладених класів.
— Я готовий.
— Насправді з наслідуванням вкладених класів (ті, які зі словом static) жодних проблем немає. Вони успадковуються так само, як і звичайні класи:
public class Car
{
public static class Door
{
}
}
public class LamborghiniDoor extends Car.Door
{
}
— А ми можемо наслідувати вкладені класи від інших вкладених класів?
— Чому б і ні?
public class Car
{
public static class Door
{
}
}
public class Lamborghini extends Car
{
public static class LamborghiniDoor extends Car.Door
{
}
}
— ОК зрозуміло. Просто наслідуємо як звичайні класи, так?
— Так. А ось внутрішні класи успадковуються не так просто.
При створенні внутрішнього класу в ньому неявно зберігається посилання на об'єкт його зовнішнього класу і передається воно до нього в конструкторі.
Тому в об'єкт класу, який успадкувався від внутрішнього класу, потрібно явно передати потрібний об'єкт.
Ось як це виглядає:
public class Car
{
public class Door
{
}
}
public class LamborghiniDoor extends Car.Door
{
LamborghiniDoor(Car car)
{
car.super();
}
}
У конструктор класу Door потрібно неявно передати об'єкт класу Car, це робиться за допомогою спеціальної конструкції: «car.super()».
До речі, якщо ти спробуєш створити конструктор взагалі без параметрів, програма просто не скомпілюється. Трохи дивно та незвично, так?
— Ага. Є кілька моментів, але загалом не «rocket science».
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ