„Здрасти, Амиго!“
— Здравей, Ким.
„Искам да ви разкажа за наследяването на статични и нестатични вложени класове.“
"Готов съм."
"Наистина няма проблеми с наследяването на статични вложени класове. Те се наследяват точно като обикновените класове:"
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
{
}
}
„Добре, разбрах. Те се наследяват точно като обикновените класове, нали?“
"Да. Но нестатичните вложени класове (известни като вътрешни класове) не се наследяват толкова лесно."
„Когато се създаде екземпляр на вътрешен клас, препратката към неговия външен клас се съхранява и имплицитно се предава на конструктора.“
„В резултат на това, когато създавате обекти от клас, който наследява вътрешен клас, трябва изрично да подадете необходимия външен обект.“
„Ето How изглежда:“
public class Car
{
public class Door
{
}
}
public class LamborghiniDoor extends Car.Door
{
LamborghiniDoor(Car car)
{
car.super();
}
}
"Трябва косвено да подадете обект Car към конструктора на вратата. Това се прави с помощта на специална конструкция: «car.super()»."
„Между другото, ако се опитате да създадете конструктора LamborghiniDoor без ниHowви параметри, програмата просто няма да се компorра. Малко странно, а?“
„Да, има няколко нюанса, но това не е ракетна наука.“
GO TO FULL VERSION