"Hai, Amigo!"

"Halo, Ellie!"

"Dina iki kita duwe topik sing menarik banget. Dina iki aku arep nyritakake babagan kelas bersarang."

"Yen kelas diumumake ing kelas liyane, mula iku kelas nested. Kelas nested non-statis diarani kelas batin."

"Obyek saka kelas njero nested nang obyek saka kelas njaba lan mulane bisa ngakses variabel kelas njaba."

Tuladha
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);
  }
 }
}

"Elinga yen kelas Door duwe metode getDoorHeight. Iku nggunakake variabel dhuwur obyek Mobil lan ngasilake dhuwur lawang."

Kelas Nested - 1

"Obyek Door ora bisa ana kanthi bebas saka obyek Mobil. Sawise kabeh, nggunakake variabel obyek Mobil. Kompiler ora katon ing konstruktor lan kelas Door referensi kanggo obyek Mobil njaba, supaya metode kelas Door njero. bisa ngakses variabel kelas Mobil njaba lan nelpon cara."

"Obyek Nested. Ndadekake raos kanggo kula. Kang menehi kritik dening diagram, iku kabeh cantik langsung."

"Lan mangkono. Kajaba saperangan nuansa."

"Kelas Door njero nduweni referensi kanggo obyek Mobil, mulane:"

1) Sampeyan ora bisa nggawe obyek Door nang cara statis saka kelas Car, amarga cara statis ora ngemot referensi kanggo obyek Car sing implicitly liwati kanggo konstruktor Door.

Bener 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 ora bisa ngemot variabel utawa metode statis.

Bener 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;
  }
 }
}

"Lan yen aku butuh variabel sing dienggo bareng karo kabeh obyek Door?"

"Sampeyan bisa tansah mung ngumumake ing kelas Mobil. Banjur bakal dituduhake dening kabeh obyek Door nested ing obyek Car."

3) Cathetan: yen kelas njero diumumake minangka umum, conto kasebut bisa digawe ing njaba kelas njaba, nanging conto kelas njaba kudu ana dhisik:

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

4) Lan komentar liyane sing meh lali.

"Amarga kita duwe rong obyek bersarang, metode obyek njero duwe akses menyang rong referensi sing diarani 'iki':"

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);
 }
}

"Aku sengaja ngumumake variabel kanthi jeneng sing padha ing kelas."

"Kanggo ngakses variabel saka kelas njaba nalika didhelikake, utawa ngakses 'iki' ing njero kelas, cukup nulis 'YourClassName.this':"

Cara ngakses 'iki' saka kelas njaba (utawa liyane).
Car.this
Car.Door.this
Car.Door.InnerClass2.InnerClass3.this

"Dadi, yen kita nulis 'iki' ing metode kelas batin, banjur 'iki' nuduhake kelas batin?"

"Iya. Persis."

"Apa sampeyan mikir babagan kelas batin, Amigo?"

"Dheweke menarik banget. Aku ora bakal ujar manawa angel banget."

"Ana akeh larangan, nanging katon cukup logis sawise sampeyan nerangake saka ngendi larangan kasebut lan kenapa ana."

"Plus, aku wis nulis kelas nested ing tugas wis rong sasi, nanging mung saiki aku ngerti apa sing wis bener wis nulis."

"Matur nuwun kanggo pelajaran sing apik, Ellie."

"Aku seneng sampeyan seneng, Amigo."