Mewarisi kelas bersarang - 1

"Hai, Amigo!"

"Hai, Kim."

"Saya ingin memberi tahu Anda tentang mewarisi kelas bersarang statis dan non-statis."

"Saya siap."

"Sebenarnya tidak ada masalah dengan mewarisi kelas bersarang statis. Mereka diwariskan seperti kelas biasa:"

Contoh
public class Car
{
 public static class Door
 {

 }
}

public class LamborghiniDoor extends Car.Door
{
}

"Tapi bisakah kita membuat kelas bersarang statis mewarisi kelas bersarang statis di kelas lain?"

"Mengapa tidak?"

Contoh
public class Car
{
 public static class Door
 {

 }
}

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

"Oke, mengerti. Mereka diwariskan seperti kelas biasa, kan?"

"Ya. Tapi kelas bersarang non-statis (dikenal sebagai kelas dalam) tidak diwariskan dengan mudah."

"Ketika instance dari kelas dalam dibuat, referensi ke kelas luarnya disimpan dan secara implisit diteruskan ke konstruktor."

"Akibatnya, saat Anda membuat objek dari kelas yang mewarisi kelas dalam, Anda harus meneruskan objek luar yang diperlukan secara eksplisit."

"Beginilah tampilannya:"

Kode
public class Car
{
 public class Door
 {

 }
}

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

"Anda harus secara implisit meneruskan objek Mobil ke konstruktor Pintu. Hal ini dilakukan dengan menggunakan konstruksi khusus: «car.super()»."

"Omong-omong, jika Anda mencoba membuat konstruktor LamborghiniDoor tanpa parameter apa pun, programnya tidak akan dapat dikompilasi. Sedikit aneh, ya?"

"Ya, ada beberapa nuansa, tapi ini bukan ilmu roket."