JavaRush /جاوا بلاگ /Random-SD /بنيادي ڪلاس تعمير ڪندڙ

بنيادي ڪلاس تعمير ڪندڙ

گروپ ۾ شايع ٿيل
سلام! آخري دفعو اسان تعمير ڪندڙن بابت ڳالهايو ، ۽ اسان انهن بابت گهڻو ڪجهه سکيو. هاڻي اسان هڪ اهڙي شيء جي باري ۾ ڳالهائينداسين جيئن بنيادي طبقي جي تعمير ڪندڙ. بنيادي ڪلاس ڇا آهي ؟ حقيقت اها آهي ته جاوا ۾، ڪيترن ئي مختلف طبقن کي هڪ عام اصل ٿي سگهي ٿو. بنيادي ڪلاس تعمير ڪندڙ - 2اهو وراثت سڏيو ويندو آهي . ڪيترن ئي نسلي طبقن ۾ هڪ عام ابن ڏاڏن وارو طبقو ٿي سگهي ٿو. مثال طور، تصور ڪريو ته اسان وٽ ھڪڙو طبقو آھي Animal(جانور):
public class Animal {

   String name;
   int age;
}
اسان ان لاء ٺاهي سگهون ٿا، مثال طور، 2 نسلي طبقن - Cat۽ Dog. اهو لفظ استعمال ڪندي ڪيو ويندو آهي extends.
public class Cat extends Animal {

}

public class Dog extends Animal {

}
اهو ٿي سگهي ٿو اسان کي مستقبل ۾ مفيد. مثال طور، جيڪڏهن ڪم چوڪن کي پڪڙڻ آهي، اسان پروگرام ۾ هڪ اعتراض ٺاهينداسين Cat. جيڪڏهن ڪم هڪ لٺ جي پٺيان هلڻ آهي، پوء اسان اعتراض استعمال ڪندا آهيون Dog. ۽ جيڪڏهن اسان هڪ پروگرام ٺاهي سگهون ٿا جيڪو هڪ ويٽرنري ڪلينڪ ٺاهي ٿو، اهو ڪم ڪندو ڪلاس سان Animal(ٻنهي ۽ ڪتن جو علاج ڪرڻ جي قابل). مستقبل لاءِ اهو ياد رکڻ تمام ضروري آهي ته جڏهن ڪا شئي ٺاهي وڃي ته ان جي بنيادي طبقي جي ڪنسٽرڪٽر کي پهرين سڏيو ويندو آهي ، ۽ ان کان پوءِ ئي ڪلاس جو تعمير ڪندڙ، جنهن شئي کي اسين ٺاهي رهيا آهيون، سڏيو ويندو آهي. اهو آهي، جڏهن هڪ اعتراض ٺاهي، Catطبقاتي تعمير ڪندڙ پهريون ڪم ڪندو Animal، ۽ صرف ان کان پوء تعمير ڪندڙ Cat. انهي کي يقيني بڻائڻ لاءِ ، اچو ته ڪنسول ۾ تعمير ڪندڙن Cat۽ آئوٽ کي شامل ڪريون.Animal
public class Animal {

   public Animal() {
       System.out.println("Animal constructor completed");
   }
}


public class Cat extends Animal {

   public Cat() {
       System.out.println("The constructor Cat worked!");
   }

   public static void main(String[] args) {
       Cat cat = new Cat();
   }
}
ڪنسول آئوٽ:

Отработал конструктор Animal
Отработал конструктор Cat!
درحقيقت، اهو ڪيئن آهي اهو سڀ ڪجهه ڪم ڪري ٿو! ڇا لاءِ آهي؟ مثال طور، ٻن طبقن جي عام شعبن کي نقل ڪرڻ کان بچڻ لاء. مثال طور، هر جانور کي دل ۽ دماغ هوندو آهي، پر هر جانور کي دم نه هوندو آهي. اسان سڀني جانورن لاءِ عام شعبن جو اعلان ڪري سگھون ٿا والدين طبقي brain۾ ، ۽ فيلڊ کي ذيلي ڪلاس ۾ . ھاڻي اسان ڪلاس لاءِ ٺاھيندڙ ٺاھينداسين ، جتي اسين سڀ 3 شعبا پاس ڪنداسين. heartAnimaltailCatCat
public class Cat extends Animal {

   String tail;

   public Cat(String brain, String heart, String tail) {
       this.brain = brain;
       this.heart = heart;
       this.tail = tail;
   }

   public static void main(String[] args) {
       Cat cat = new Cat("Brain", "Heart", "Tail");
   }
}
توجهه ڏيو:تعمير ڪندڙ ڪاميابي سان ڪم ڪري ٿو، جيتوڻيڪ ڪلاس Cat۾ فيلڊ brain۽ heart. اهي شعبا بيس ڪلاس مان ”کڙي ويا“ Animal. نسل پرست طبقي کي بنيادي طبقي جي شعبن تائين رسائي آهي، تنهنڪري Catاهي اسان جي طبقي ۾ نظر اچن ٿا. Catتنهن ڪري، اسان کي ڪلاس ۾ انهن شعبن کي نقل ڪرڻ جي ضرورت ناهي - اسان انهن کي ڪلاس مان وٺي سگهون ٿا Animal. ان کان علاوه، اسان واضح طور تي سڏي سگهون ٿا بنيادي طبقي جي تعمير ڪندڙ کي نسل جي طبقي جي تعمير ڪندڙ ۾. بنيادي ڪلاس کي " سپر ڪلاس " پڻ سڏيو ويندو آهي، ڇو ته جاوا لفظ استعمال ڪري ٿو super. پوئين مثال ۾
public Cat(String brain, String heart, String tail) {
       this.brain = brain;
       this.heart = heart;
       this.tail = tail;
   }
اسان الڳ الڳ هر فيلڊ کي تفويض ڪيو آهي جيڪو اسان جي والدين طبقي ۾ آهي. حقيقت ۾، توهان کي اهو ڪرڻ جي ضرورت ناهي. اهو ڪافي آهي ته والدين طبقي جي تعمير ڪندڙ کي سڏين ۽ ان کي ضروري پيٽرولر پاس ڪريو:
public class Animal {

   String brain;
   String heart;

   public Animal(String brain, String heart) {
       this.brain = brain;
       this.heart = heart;
   }

public class Cat extends Animal {

   String tail;

   public Cat(String brain, String heart, String tail) {
       super(brain, heart);
       this.tail = tail;
   }

   public static void main(String[] args) {
       Cat cat = new Cat("Brain", "Heart", "Tail");
   }
}
تعمير ڪندڙ ۾، Catاسان تعمير ڪندڙ کي سڏيو Animal۽ ان کي ٻه شعبا منظور ڪيا. اسان کي صرف هڪ فيلڊ کي واضح طور تي شروع ڪرڻو آهي - tailجيڪو Animalموجود ناهي. ياد رکو ته اسان ڪيئن چيو آهي ته جڏهن ڪا شئي ٺاهي ويندي آهي، والدين طبقي جي تعمير ڪندڙ کي پهريون سڏيو ويندو آهي؟ تنهن ڪري، اهو ئي سبب آهي ته لفظ super()هميشه تعمير ڪندڙ ۾ پهريون ڀيرو اچڻ گهرجي! ٻي صورت ۾، تعمير ڪندڙن جي منطق کي ٽوڙيو ويندو ۽ پروگرام ۾ غلطي پيدا ٿيندي.
public class Cat extends Animal {

   String tail;

   public Cat(String brain, String heart, String tail) {
       this.tail = tail;
       super(brain, heart);//error!
   }

   public static void main(String[] args) {
       Cat cat = new Cat("Brain", "Heart", "Tail");
   }
}
مرتب ڪندڙ ڄاڻي ٿو ته جڏهن هڪ نسلي طبقي جو اعتراض ٺاهي، بنيادي طبقي جي تعمير ڪندڙ کي پهريون سڏيو ويندو آهي. ۽ جيڪڏھن توھان دستي طور ھن رويي کي تبديل ڪرڻ جي ڪوشش ڪندا، اھو ان کي اجازت نه ڏيندو.

شئي ٺاهڻ جو عمل.

مٿي اسان هڪ مثال ڏٺو بنيادي ۽ والدين طبقي سان - Animal۽ Cat. ھاڻي، انھن ٻنھي طبقن کي مثال طور استعمال ڪندي، اسان ھڪڙي شئي جي ٺاھڻ ۽ متغيرن جي شروعات ڪرڻ واري عمل کي ڏسنداسين. اسان ڄاڻون ٿا ته متغير جامد آهن ۽ مثال متغير (غير جامد). اسان اهو پڻ ڄاڻون ٿا ته بنيادي طبقي جا Animalپنهنجا متغير آهن، ۽ نسلي طبقي Catجا پنهنجا آهن. Animalاچو ته وضاحت Catلاءِ ڪلاس ۾ ھڪڙو جامد متغير شامل ڪريون . animalCountطبقاتي متغير Animalزمين تي جانورن جي نسلن جو ڪل تعداد هوندو، ۽ متغير catsCountٻلي جي نسلن جو تعداد هوندو. ان کان علاوه، اسان ٻنهي طبقن جي سڀني غير جامد متغيرن کي شروعاتي قدر تفويض ڪنداسين (جيڪو پوءِ ٺاھيندڙ ۾ تبديل ٿيندو).
public class Animal {

   String brain = "The initial value of brain in the Animal class";
   String heart = "The initial value of heart in the Animal class";

   public static int animalCount = 7700000;

   public Animal(String brain, String heart) {
       System.out.println("The constructor of the Animal base class is being executed");
       System.out.println("Have the variables of the Animal class already been initialized?");
       System.out.println("The current value of the static variable animalCount = " + animalCount);
       System.out.println("Current value of brain in class Animal = " + this.brain);
       System.out.println("Current value of heart in class Animal = " + this.heart);
       System.out.println("Have the variables of the Cat class already been initialized?");
       System.out.println("The current value of the static variable catsCount = " + Cat.catsCount);

       this.brain = brain;
       this.heart = heart;
       System.out.println("Animal base class constructor completed!");
       System.out.println("Current value of brain = " + this.brain);
       System.out.println("Current value of heart = " + this.heart);
   }
}

public class Cat extends Animal {

   String tail = "The initial value of tail in the Cat class";

   static int catsCount = 37;

   public Cat(String brain, String heart, String tail) {
       super(brain, heart);
       System.out.println("The constructor of the Cat class has started (the Animal constructor has already been executed)");
       System.out.println("The current value of the static variable catsCount = " + catsCount);
       System.out.println("Current value tail = " + this.tail);
       this.tail = tail;
       System.out.println("Current value tail = " + this.tail);
   }

   public static void main(String[] args) {
       Cat cat = new Cat("Brain", "Heart", "Tail");
   }
}
Catتنهن ڪري، اسان ورثي واري طبقي جو هڪ نئون اعتراض ٺاهيون ٿا Animal. اچو ته اسان جي پروگرام ۾ تفصيلي ڪنسول آئوٽ شامل ڪريو ڏسو ته ڇا ٿيندو ۽ ڪهڙي ترتيب ۾. اھو اھو آھي جيڪو ھڪڙو اعتراض ٺاھڻ جي نتيجي ۾ ڪنسول ڏانھن ٻاھر ٿيندو Cat:

Выполняется конструктор базового класса Animal
Были ли уже проинициализированы переменные класса Animal?
Текущее meaning статической переменной animalCount = 7700000
Текущее meaning brain в классе Animal = Изначальное meaning brain в классе Animal
Текущее meaning heart в классе Animal = Изначальное meaning heart в классе Animal
Были ли уже проинициализированы переменные класса Cat?
Текущее meaning статической переменной catsCount = 37
Конструктор базового класса Animal завершил работу!
Текущее meaning brain = Мозг
Текущее meaning heart = Сердце
Конструктор класса Cat начал работу (конструктор Animal уже был выполнен)
Текущее meaning статической переменной catsCount = 37
Текущее meaning tail = Изначальное meaning tail в классе Cat
Текущее meaning tail = Хвост
تنهن ڪري، هاڻي اسان واضح طور تي ڏسي سگهون ٿا ته ڪهڙي ترتيب ۾ متغيرن جي شروعات ڪئي وئي آهي ۽ نئين شئي ٺاهڻ وقت تعمير ڪندڙن کي سڏيو ويندو آهي:
  1. بنيادي ڪلاس ( ) جا جامد متغير شروع ڪيا ويا آهن . اسان جي حالت ۾، ڪلاس متغير کي قيمت 7700000 مقرر ڪيو ويو آهي.AnimalanimalCountAnimal

  2. Descendant class ( ) جا جامد متغير شروع ڪيا ويا آهن . ڌيان ڏيو - اسان اڃا تائين تعمير ڪندڙ اندر آهيون ، ۽ ڪنسول اڳ ۾ ئي چوي ٿو:CatAnimal

    
        Выполняется конструктор базового класса Animal
        Были ли уже проинициализированы переменные класса Animal?
        Текущее meaning статической переменной animalCount = 7700000
        Текущее meaning brain в классе Animal = Изначальное meaning brain в классе Animal
        Текущее meaning heart в классе Animal = Изначальное meaning heart в классе Animal
        Были ли уже проинициализированы переменные класса Cat?
        Текущее meaning статической переменной catsCount = 37
  3. اڳيون، بيس ڪلاس جا غير جامد متغير شروع ڪيا ويا آهن . اسان خاص طور تي انھن کي ابتدائي قدر مقرر ڪيو آھي، جيڪي پوء ٺاھيندڙ ۾ نون ڏانھن تبديل ڪيا ويا آھن. ٺاهيندڙ اڃا تائين پنهنجو ڪم مڪمل نه ڪيو آهي، پر ابتدائي قدر اڳ ۾ ئي مقرر ڪيا ويا آهن :Animalbrainheart

    
        Выполняется конструктор базового класса Animal
        Были ли уже проинициализированы переменные класса Animal?
        Текущее meaning статической переменной animalCount = 7700000
        Текущее meaning brain в классе Animal = Изначальное meaning brain в классе Animal
        Текущее meaning heart в классе Animal = Изначальное meaning heart в классе Animal
  4. بنيادي ڪلاس تعمير ڪندڙ ڪم ڪرڻ شروع ڪري ٿو .

    اسان اڳ ۾ ئي ڏسي چڪا آهيون ته هي اسٽيج صرف چوٿون آهي قطار ۾: پهرين ٽن نقطن ۾، وقت تي تعمير ڪندڙ ڪم ڪرڻ شروع ڪري ٿو، Animalڪيترائي متغير اڳ ۾ ئي قدر مقرر ڪيا ويا آهن.

  5. ٻار جي طبقي جي غير جامد شعبن کي شروع ڪرڻ ( ).Cat

    اهو ٿيڻ کان اڳ ڊزائنر Catڪم ڪرڻ شروع ڪري ٿو.

    وقت تي هن ڪم ڪرڻ شروع ڪيو، متغير tailاڳ ۾ ئي هڪ قدر هو:

    
    Конструктор класса Cat начал работу (конструктор Animal уже был выполнен)
    Текущее meaning статической переменной catsCount = 37
    Текущее meaning tail = Изначальное meaning tail в классе Cat
  6. نسلي طبقي جي تعمير ڪندڙ کي سڏيو ويندو آهي Cat

اهو ئي آهي جيڪو هڪ شئي ٺاهڻ جو عمل جاوا ۾ ڏسڻ جهڙو آهي! مون کي اهو چوڻ گهرجي ته اسان ڪرمنگ جا وڏا پرستار نه آهيون، پر اهو بهتر آهي ته متغيرن جي شروعات ۽ تعمير ڪندڙن کي سڏڻ جي ترتيب کي ياد رکڻ ۽ مستقبل لاء انهن کي ياد رکڻ لاء . اهو پروگرام جي ترقي ۽ توهان جي شين جي حالت جي ڪنهن به وقت توهان جي سمجھ کي تمام گهڻو وڌائيندو. ان کان علاوه، ڪلاس اڪثر ڪري سڌو والدين ڪلاس (سپر ڪلاسز/بيس ڪلاس) نه هوندا آهن. انهي صورت ۾، بنيادي طبقي سان لاڳاپيل شيون عمل نه ڪيا ويندا.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION