CodeGym /Kurslar /Java Çekirdeği /Nesne oluşturma: yapıcı çağrılarının sırası

Nesne oluşturma: yapıcı çağrılarının sırası

Java Çekirdeği
Seviye, Ders
Mevcut

"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!"

4
Görev
Java Çekirdeği, seviye, ders
Kilitli
Code entry
Sometimes you don't need to think, you just need to hammer it out! As paradoxical as it may seem, sometimes your fingers will "remember" better than your conscious mind. That's why while training at the secret CodeGym center you will sometimes encounter tasks that require you to enter code. By entering code, you get used to the syntax and assimilate some material. What's more, you combat laziness.
Yorumlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION