"Hai, Amigo!"

"Hai, Elli!"

"Hari ini kami memiliki topik yang sangat menarik. Hari ini saya akan memberi tahu Anda tentang kelas bersarang."

"Jika sebuah kelas dideklarasikan di dalam kelas lain, maka itu adalah kelas bersarang. Kelas bersarang non-statis disebut kelas dalam."

"Objek kelas dalam bersarang di dalam objek kelas luar dan karena itu dapat mengakses variabel kelas luar."

Contoh
public class Car
{
 int height = 160;
 ArrayList doors = new ArrayList();

 public Car
 {
  doors.add(new Door());
  doors.add(new Door());
  doors.add(new Door());
  doors.add(new Door());
 }

class Door()
 {
  public int getDoorHeight()
  {
   return (int)(height * 0.80);
  }
 }
}

"Perhatikan bahwa kelas Door memiliki metode getDoorHeight. Ia menggunakan variabel ketinggian objek Car dan mengembalikan ketinggian pintu."

Kelas bersarang - 1

"Objek Door tidak dapat eksis secara independen dari objek Car. Lagi pula, ia menggunakan variabel objek Car. Compiler secara tidak terlihat menambahkan ke konstruktor dan ke kelas Door referensi ke objek Car luar, sehingga metode kelas Door bagian dalam dapat mengakses variabel kelas Mobil luar dan memanggil metodenya."

"Objek bersarang. Masuk akal bagiku. Dilihat dari diagramnya, semuanya cukup mudah."

"Dan begitulah. Kecuali untuk beberapa nuansa."

"Kelas Pintu bagian dalam memiliki referensi ke objek Car, oleh karena itu:"

1) Anda tidak dapat membuat objek Pintu di dalam metode statis dari kelas Mobil, karena metode statis tidak berisi referensi ke objek Mobil yang secara implisit diteruskan ke konstruktor Pintu.

Benar Salah
public class Car
{
 public static Door createDoor()
 {
  Car car = new Car();
  return car.new Door();
 }

 public class Door
 {
  int width, height;
 }
}
public class Car
{
 public static Door createDoor()
 {
  return new Door();
 }

 public class Door
 {
  int width, height;
 }
}

2) Kelas Door tidak boleh berisi variabel atau metode statis.

Benar Salah
public class Car
{
 public int count;
 public int getCount()
 {
  return count;
 }

 public class Door
 {
  int width, height;
 }
}
public class Car
{

 public class Door
 {
  public static int count;
  int width, height;

  public static int getCount()
  {
   return count;
  }
 }
}

"Dan bagaimana jika saya memerlukan variabel yang digunakan bersama oleh semua objek Door?"

"Anda selalu dapat mendeklarasikannya di kelas Car. Kemudian itu akan dibagikan oleh semua objek Door yang bersarang di objek Car."

3) Catatan: jika kelas dalam dideklarasikan sebagai publik, turunannya dapat dibuat di luar kelas luar, tetapi turunan dari kelas luar harus ada terlebih dahulu:

Car car = new Car();
Car.Door door = car.new Door();
Car.Door door = new Car().newDoor();

4) Dan satu komentar lagi yang hampir saya lupakan.

"Karena kita memiliki dua objek bersarang, metode objek bagian dalam memiliki akses ke dua referensi yang disebut 'ini':"

public class Car
{
 int width, height;

 public class Door
 {
  int width, height;

  public void setHeight(int height)
  {
   this.height = height;
  }

 public int getHeight()
 {
  if (height != 0)
   return this.height;
  else
   return (int)(Car.this.height * 0.8);
 }
}

"Saya sengaja mendeklarasikan variabel dengan nama yang sama di kelas."

"Untuk mengakses variabel dari kelas luar saat disembunyikan, atau untuk mengakses 'ini' di dalam kelas dalam, cukup tulis 'NamaKelasAnda.ini':"

Cara mengakses 'ini' dari kelas luar (atau lainnya).
Car.this
Car.Door.this
Car.Door.InnerClass2.InnerClass3.this

"Jadi, jika kita menulis 'ini' di dalam metode kelas dalam, maka 'ini' mengacu pada kelas dalam?"

"Iya benar sekali."

"Apa pendapatmu tentang kelas dalam, Amigo?"

"Mereka sangat menarik. Saya tidak akan mengatakan mereka terlalu sulit."

"Ada banyak batasan, tetapi tampaknya cukup logis setelah Anda menjelaskan dari mana batasan itu berasal dan mengapa itu ada."

"Selain itu, saya telah menulis kelas bersarang dalam tugas selama dua bulan, tetapi baru sekarang saya menyadari apa yang sebenarnya saya tulis."

"Terima kasih untuk pelajaran yang luar biasa, Ellie."

"Aku senang kau menyukainya, Amigo."