Mewarisi kelas bersarang - 1

"Hai, Amigo!"

"Hai, Kim."

"Saya ingin memberitahu anda tentang mewarisi kelas bersarang statik dan bukan statik."

"Saya sudah bersedia."

"Benar-benar tidak ada sebarang isu dengan mewarisi kelas bersarang statik. Mereka diwarisi sama seperti kelas biasa:"

Contoh
public class Car
{
 public static class Door
 {

 }
}

public class LamborghiniDoor extends Car.Door
{
}

"Tetapi bolehkah kita menjadikan kelas bersarang statik mewarisi kelas bersarang statik dalam kelas lain?"

"Kenapa tidak?"

Contoh
public class Car
{
 public static class Door
 {

 }
}

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

"OK, faham. Mereka diwarisi sama seperti kelas biasa, kan?"

"Ya. Tetapi kelas bersarang bukan statik (dikenali sebagai kelas dalaman) tidak diwarisi dengan mudah."

"Apabila contoh kelas dalam dicipta, rujukan kepada kelas luarnya disimpan dan secara tersirat dihantar kepada pembina."

"Akibatnya, apabila anda mencipta objek kelas yang mewarisi kelas dalam, anda mesti lulus objek luar yang diperlukan secara eksplisit."

"Beginilah rupanya:"

Kod
public class Car
{
 public class Door
 {

 }
}

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

"Anda mesti secara tersirat menghantar objek Kereta kepada pembina Pintu. Ini dilakukan menggunakan binaan khas: «car.super()»."

"Dengan cara ini, jika anda cuba mencipta pembina LamborghiniDoor tanpa sebarang parameter, program itu tidak akan disusun. Agak pelik, ya?"

"Ya, terdapat beberapa nuansa, tetapi ia bukan sains roket."