JavaRush /Kurslar /All lectures for UZ purposes /Obyekt yaratish. Konstruktorlarni chaqirish tartibi

Obyekt yaratish. Konstruktorlarni chaqirish tartibi

All lectures for UZ purposes
Daraja, Dars
Mavjud

— Salom, Amigo! Hozir men senga obyekt yaratish jarayoni haqida gapirib beraman.

— Nima qiyin, Risha amaki? new sinf nomini yozib, to'g'ri konstruktorni ko'rsatib tayyorlash!

— Bu to'g'ri. Lekin obyekt ichida nima sodir bo'ladi?

— Nima sodir bo'ladi?

— Mana nima! Obyekt bir necha bosqichda yaratiladi.

1) Avvalo barcha o'zgaruvchilar – sinf maydonlari uchun xotira ajratiladi.

2) Keyin asosiy sinf initsializatsiyasi amalga oshiriladi.

3) So'ng o'zgaruvchilarga qiymat beriladi, agar ular ko'rsatilgan bo'lsa.

4) Va nihoyat, konstruktor chaqiriladi.

— Juda qiyin emas ko'rinadi: avval o'zgaruvchilar, keyin konstruktor.

— Keling, ikki sinf misolida bu qanday ishlashini ko'rib chiqaylik:

Kod Tavsif
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; ←-
 }
}
Biz ikki sinfni yaratdik: Pet(hayvon) va Cat(mushuk).

Cat sinfida biz asosiy sinf konstruktorini ochiqcha chaqirganmiz.
U har doim konstruktorning birinchi qatorida bo'lishi kerak.

Xotirani ajratgandan keyin nima bo'ladi:
18 – asosiy sinf konstruktorini chaqirish
3, 4 – Pet sinfidagi o'zgaruvchilarni initsializatsiya qilish
8, 9 – Pet konstruktor kodini ishlatish

so'ng Cat sinfini initsializatsiya qilish jarayoni boshlanadi
14 – Cat sinfidagi o'zgaruvchilarni initsializatsiya qilish
19 – Cat konstruktor kodini ishlatish

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

— Bir oz chalkash, nima uchun bu qadar qiyin?

— Aslida qiyin emas, agar nima sodir bo'lishini bilsangiz:
Agar sinfda birorta ham konstruktor bo'lmasa, u avtomatik ravishda yaratiladi.

Standart konstruktor
class Cat
{
 int x = 5;
 int y = 5;
}
class Cat
{
 int x = 5;
 int y = 5;
 public Cat() 
 {
 }
}

Agar asosiy sinf konstruktorini chaqirmasangiz, uning chaqirilishi avtomatik ravishda qo'shiladi.

Asosiy sinf konstruktorini chaqirish
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(); }
}

Sinfning o'zgaruvchilarini initsializatsiya qilish konstruktor ichida sodir bo'ladi.

Sinf o'zgaruvchilarini initsializatsiya qilish
class Cat
{
 int x = 5; int y = 5;
}
class Cat
{
 int x;
 int y;
 public Cat() { super(); this.x = 5; this.y = 5; }
}
Bu qanday sodir bo'ladi
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)
 {
  //asosiy sinf konstruktorini chaqirish
  super();
  //o'zgaruvchilarni initsializatsiya qilish
  this.x = 5; this.y = 5; this.weight = 10;
  //konstruktor kodini chaqirish
  this.x = x; this.y = y; 
 }
}
class Cat extends Pet
{
 int tailLength;
 int age;
 Cat(int x, int y, int age)
 {
  //asosiy sinf konstruktorini chaqirish
  super(x, y);
  //o'zgaruvchilarni initsializatsiya qilish
  this.tailLength = 8;
  //konstruktor kodini chaqirish
  this.age = age;
 }
}

— Endi ancha tushunarli: birinchi asosiy sinf, keyin konstruktor tashqarisidagi o'zgaruvchilar, keyin konstruktor kodini chaqirish.

— Ajoyib, Amigo, aynan shunday!

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION