Pagpapamana ng mga nested na klase - 1

"Hi, Amigo!"

"Hi, Kim."

"Gusto kong sabihin sa iyo ang tungkol sa pagmamana ng mga static at non-static na nested na klase."

"Handa na ako."

"Talagang walang anumang mga isyu sa pagmamana ng mga static na nested na klase. Ang mga ito ay minana tulad ng mga regular na klase:"

Halimbawa
public class Car
{
 public static class Door
 {

 }
}

public class LamborghiniDoor extends Car.Door
{
}

"Ngunit maaari ba nating gawin ang mga static na nested na klase na magmana ng mga static na nested na klase sa ibang mga klase?"

"Bakit hindi?"

Halimbawa
public class Car
{
 public static class Door
 {

 }
}

public class Lamborghini extends Car
{
 public static class LamborghiniDoor extends Car.Door
 {
 }
}

"OK, got it. Manang-mana sila just like regular classes, right?"

"Oo. Ngunit ang mga non-static na nested na klase (kilala bilang mga panloob na klase) ay hindi madaling namamana."

"Kapag ang isang instance ng isang panloob na klase ay nilikha, isang reference sa kanyang panlabas na klase ay naka-imbak at implicitly ipinasa sa constructor."

"Bilang resulta, kapag lumikha ka ng mga bagay ng isang klase na nagmamana ng isang panloob na klase, dapat mong tahasang ipasa ang kinakailangang panlabas na bagay."

"Ganito ang hitsura nito:"

Code
public class Car
{
 public class Door
 {

 }
}

public class LamborghiniDoor extends Car.Door
{
 LamborghiniDoor(Car car)
 {
  car.super();
 }
}

"Dapat mong implicitly ipasa ang isang Car object sa Door constructor. Ginagawa ito gamit ang isang espesyal na construct: «car.super()»."

"Nga pala, kung susubukan mong likhain ang LamborghiniDoor constructor nang walang anumang mga parameter, ang program ay hindi mag-compile. Medyo kakaiba, ha?"

"Oo, mayroong ilang mga nuances, ngunit hindi ito rocket science."