"Merhaba Amigo! Şimdi size nesnelerin nasıl yaratıldığını anlatacağım."

"Bunun nesi bu kadar karmaşık, Rishi Amca? Yeni ve sınıf adını yazıyorsun, doğru kurucuyu belirtiyorsun ve işin bitiyor!"

"Bu doğru. Ama bunu yaptığınızda nesnenin içinde ne oluyor?"

"Ne oluyor?"

"Olan şey şu: Nesne birkaç aşamada yaratılıyor."

1)  İlk olarak, sınıfın tüm üye değişkenleri için bellek ayrılır.

2)  Ardından temel sınıf başlatılır.

3)  Ardından, varsa tüm değişkenlere değerler atanır.

4)  Son olarak, yapıcı çağrılır.

"Çok zor görünmüyor: önce değişkenler, sonra yapıcı."

"Bunun iki sınıflı bir örnekte nasıl çalıştığını görelim:"

kod Tanım
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; -
 }
}
İki sınıf bildirin: Pet(pet) ve Cat(cat).

Cat sınıfında, temel sınıfın yapıcısına açık bir çağrı görüyoruz .
Yapıcıda her zaman ilk satırda olmalıdır.

Bellek tahsis edildikten sonra şunlar olur:
18  – temel sınıfın yapıcısını çağırın.
3, 4  – Pet'te değişkenleri başlat.
8, 9  – Pet yapıcısında kodu yürütün.

Ardından Cat sınıfı başlatılmaya başlar.
14  – Cat'te değişkenleri başlat
19  – Cat yapıcısında kodu yürütün

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

"Bu biraz kafa karıştırıcı. Neden bu kadar karmaşık?"

"Aslında gerçekte neler olup bittiğini biliyorsanız, aslında zor değil:"

Bir sınıfın herhangi bir yapıcısı yoksa, otomatik olarak bir tane oluşturulur.

varsayılan kurucu
class Cat
{
 int x = 5;
 int y = 5;
}
class Cat
{
 int x = 5;
 int y = 5;
 public Cat() 
 {
 }
}

Temel sınıf yapıcısını çağırmazsanız, otomatik olarak çağrılacaktır.

Temel sınıfın kurucusunun çağrılması
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();
 }
}

Üye değişkenleri yapıcıda başlatılır.

Üye değişkenlerin başlatılması
class Cat
{
 int x = 5;
 int y = 5;
}
class Cat
{
 int x;
 int y;
 public Cat()
 {
  super();
  this.x = 5;
  this.y = 5;
  }
}
gerçekten ne oluyor
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;
 }
}

"Şimdi çok daha açık: önce temel sınıf, sonra yapıcının dışındaki değişkenler, sonra da yapıcı kodu."

"Aferin Amigo! İşte bu kadar!"