Спадкування внутрішніх класів - 1

— Привіт, Аміго!

— Привіт, Кім.

— Я хочу розповісти тобі про успадкування внутрішніх та вкладених класів.

— Я готовий.

— Насправді з наслідуванням вкладених класів (ті, які зі словом 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».