"Halo, Amigo! Sekarang saya akan memberi tahu Anda tentang bagaimana objek dibuat."

"Apa yang rumit tentang itu, Paman Rishi? Anda menulis baru dan nama kelasnya, menunjukkan konstruktor yang benar, dan selesai!"

"Itu benar. Tapi apa yang terjadi di dalam objek saat kamu melakukan itu?"

"Apa yang terjadi?"

"Inilah yang terjadi: Objek dibuat dalam beberapa tahap."

1)  Pertama, memori dialokasikan untuk semua variabel anggota kelas.

2)  Kemudian kelas dasar diinisialisasi.

3)  Kemudian semua variabel diberi nilai, jika ada yang ditentukan.

4)  Akhirnya, konstruktor dipanggil.

"Kelihatannya tidak terlalu sulit: pertama variabelnya, lalu konstruktornya."

"Mari kita lihat cara kerjanya dalam contoh dengan dua kelas:"

Kode Keterangan
class Pet
{
 int x = 5, y = 5; ←-
 int weight = 10; ←-

 Pet(int x, int y)
 {
  this.x = x; ←-
  this.y = y; ←-
 }
}
class Cat extends Pet
{
 int tailLength = 8; ←-
 int age;
 Cat(int x, int y, int age)
 {
  super(x, y); ←-
  this.age = age; ←-
 }
}
Deklarasikan dua kelas: Pet(hewan peliharaan) dan Kucing(kucing).

Di kelas Cat, kita melihat panggilan eksplisit ke konstruktor kelas dasar .
Itu harus selalu di baris pertama di konstruktor.

Inilah yang terjadi setelah memori dialokasikan:
18  – panggil konstruktor dari kelas dasar.
3, 4  – menginisialisasi variabel di Pet.
8, 9  – jalankan kode di konstruktor Pet.

Kemudian kelas Cat mulai diinisialisasi.
14  – menginisialisasi variabel di Cat
19  – mengeksekusi kode di konstruktor Cat

public static void main(String[] args)
{
 Cat cat = new Cat (50, 50, 5);
}

"Itu sedikit membingungkan. Mengapa begitu rumit?"

"Sebenarnya tidak sulit jika kamu tahu apa yang sebenarnya terjadi:"

Jika suatu kelas tidak memiliki konstruktor apa pun, konstruktor akan dibuat secara otomatis.

Konstruktor default
class Cat
{
 int x = 5;
 int y = 5;
}
class Cat
{
 int x = 5;
 int y = 5;
 public Cat() 
 {
 }
}

Jika Anda tidak memanggil konstruktor kelas dasar, itu akan dipanggil secara otomatis.

Panggilan konstruktor kelas dasar
class Pet
{
 public String name;
}
class Pet extends Object
{
 public String name;
 public Pet()
 {
  super();
 }
}
class Cat extends Pet
{
 int x = 5;
 int y = 5;
}
class Cat extends Pet
{
 int x = 5;
 int y = 5;
 public Cat()
 {
  super();
 }
}

Variabel anggota diinisialisasi dalam konstruktor.

Inisialisasi variabel anggota
class Cat
{
 int x = 5;
 int y = 5;
}
class Cat
{
 int x;
 int y;
 public Cat()
 {
  super();
  this.x = 5;
  this.y = 5;
  }
}
Apa yang sebenarnya terjadi
class Pet
{
 int x = 5, y = 5;
 int weight = 10;
 Pet(int x, int y)
 {
  this.x = x;
  this.y = y;
 }
}

class Cat extends Pet
{
 int tailLength = 8;
 int age;
 Cat(int x, int y, int age)
 {
  super(x, y);
  this.age = age;
 }
}
class Pet extends Object
{
 int x;
 int y;
 int weight;

 Pet(int x, int y)
 {
  //call of the base class's constructor
  super();
  //initialize variables
  this.x = 5;
  this.y = 5;
  this.weight = 10;
  //execute the constructor code
  this.x = x;
  this.y = y;
 }
}
class Cat extends Pet
{
 int tailLength;
 int age;
 Cat(int x, int y, int age)
 {
  //call of the base class's constructor
   super(x, y);
  //initialize variables
  this.tailLength = 8;
  //execute the constructor code
  this.age = age;
 }
}

"Sekarang jauh lebih jelas: pertama kelas dasar, lalu variabel di luar konstruktor, lalu kode konstruktor."

"Bagus sekali, Amigo! Itu dia!"