CodeGym /جاوا بلاگ /Random-SD /بنيادي ڪلاس تعمير ڪندڙ
John Squirrels
سطح
San Francisco

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

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

   String name;
   int age;
}
اسان 2 ٻار طبقن جو اعلان ڪري سگھون ٿا: Cat۽ Dog. اهو لفظ extensions استعمال ڪندي ڪيو ويندو آهي .
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 executed");
   }
}


public class Cat extends Animal {

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

   public static void main(String[] args) {
       Cat cat = new Cat();
   }
}
ڪنسول آئوٽ پُٽ: جانورن جي اڏاوت ڪندڙ کي قتل ڪيو ويو Cat Constructor execute ڪيو ويو! درحقيقت، اهو انهي طريقي سان ڪم ڪري ٿو! ڇو؟ ھڪڙو سبب اھو آھي ته ٻنھي طبقن جي وچ ۾ حصيداري ٿيل شعبن کي نقل ڪرڻ کان بچڻ. مثال طور، هر جانور کي دل ۽ دماغ هوندو آهي، پر هر جانور کي دم نه هوندو آهي. اسان دماغ ۽ دل جي شعبن جو اعلان ڪري سگهون ٿا، جيڪي سڀني جانورن لاءِ عام آهن، Animalوالدين طبقي ۾، ۽ ذيلي ڪلاس ۾ دم جوCat ميدان . . ھاڻي اسان ھڪڙي طبقي ٺاھيندڙ جو اعلان ڪنداسين Catجيڪو سڀني 3 شعبن لاء دليل وٺندو آھي.
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۾ دماغ ۽ دل جا شعبا نه آهن . اهي شعبا Animalبنيادي طبقي مان "وراثت" آهن. وراثت واري طبقي کي بنيادي طبقي جي شعبن تائين رسائي آهي ، تنهنڪري اهي اسان جي Catطبقي ۾ نظر اچن ٿا. نتيجي طور، اسان کي ڪلاس ۾ انهن شعبن کي نقل ڪرڻ جي ضرورت ناهي Cat. اسان انهن کي Animalڪلاس مان وٺي سگهون ٿا. وڌيڪ ڇا آهي، اسان واضح طور تي سڏي سگهون ٿا بنيادي طبقي جي تعمير ڪندڙ کي ٻار جي طبقي جي تعمير ڪندڙ ۾. هڪ بنيادي طبقي کي پڻ سڏيو ويندو آهي " سپر ڪلاس ". ان ڪري جاوا بنيادي ڪلاس کي ظاهر ڪرڻ لاءِ لفظ سپر استعمال ڪري ٿو. پوئين مثال ۾
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");
   }
}
Constructor ۾ Cat، اسان AnimalConstructor سڏيو ۽ ٻه شعبا گذري ويا. واضح طور تي شروع ڪرڻ لاءِ اسان وٽ صرف هڪ فيلڊ هو: 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 متغير ڌرتيءَ تي جانورن جي مجموعي تعداد جي نمائندگي ڪندو، ۽ catCount متغير ٻلي جي نسلن جي تعداد جي نشاندهي ڪندو. اضافي طور تي، اسان ٻنهي طبقن ۾ سڀني غير جامد متغيرن کي شروعاتي قدر تفويض ڪنداسين (جيڪو پوءِ تعمير ڪندڙ ۾ تبديل ڪيو ويندو). Animal
public class Animal {

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

   public static int animalCount = 7700000;

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

       this.brain = brain;
       this.heart = heart;
       System.out.println("Animal base class constructor is done!");
       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 = "Initial value of tail in the Cat class";

   static int catCount = 37;

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

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

  2. چائلڊ ڪلاس جا جامد متغير ( Cat) شروع ڪيا ويا آهن.

    نوٽ: اسان اڃا تائين Animalتعمير ڪندڙ جي اندر آهيون ۽ اسان اڳ ۾ ئي ڏيکاريا آهيون:

    Animal base class constructor هلندي آهي
    ڇا جانورن جي ڪلاس جا متغير اڳ ۾ ئي شروع ڪيا ويا آهن؟
    جامد متغير جي موجوده قيمت animalCount = 7700000
    دماغ جي موجوده قيمت جانورن جي طبقي ۾ = دماغ جي شروعاتي قيمت جانورن جي طبقي ۾
    دل جي موجوده قيمت = جانورن جي طبقي ۾ دل جي شروعاتي قيمت
    اڳ ۾ ئي ٻلي طبقي جا متغير آھن شروعات ڪئي وئي؟
    جامد متغير جي موجوده قيمت catCount = 37


  3. پوءِ بيس ڪلاس جي غير جامد متغيرن کي شروع ڪيو وڃي ٿو. اسان خاص طور تي انھن کي ابتدائي قدر مقرر ڪيو، جيڪي پوء ٺاھيندڙ ۾ تبديل ڪيا ويا آھن. جانورن جي اڏاوت اڃا ختم نه ڪئي آهي، پر دماغ ۽ دل جا ابتدائي قدر اڳ ۾ ئي مقرر ڪيا ويا آهن:

    اينيمل بيس ڪلاس ڪنسٽرڪٽر هلي رهيو آهي
    ڇا اينيمل ڪلاس جا متغير اڳ ۾ ئي شروع ڪيا ويا آهن؟
    جامد متغير جانورن جي موجوده قيمت = 7700000
    دماغ جي موجوده قيمت جانورن جي طبقي ۾ = دماغ جي شروعاتي قيمت جانورن جي طبقي ۾
    دل جي موجوده قيمت = جانورن جي طبقي ۾ دل جي شروعاتي قيمت


  4. بنيادي ڪلاس تعمير ڪندڙ شروع ٿئي ٿو.
    اسان اڳ ۾ ئي پاڻ کي يقين ڏياريو آهي ته هي قدم چوٿون آهي: تعمير ڪندڙ جي شروعات ۾ پهرين ٽن مرحلن ۾ Animal، ڪيترائي متغير اڳ ۾ ئي قدر مقرر ڪيا ويا آهن.


  5. چائلڊ ڪلاس ( ) جا غير جامد شعبا Catشروع ڪيا ويا آهن.
    اهو ٿئي ٿو ان کان اڳ جو Catڪنسٽرڪٽر هلڻ شروع ٿئي.
    جڏهن اهو هلڻ شروع ٿئي ٿو، دم متغير اڳ ۾ ئي هڪ قدر آهي:

    ٻلي ڪلاس جو ٺاھيندڙ شروع ٿي چڪو آھي (جانورن جو ٺاھيندڙ اڳ ۾ ئي ختم ٿي چڪو آھي) جامد متغير جي موجوده قيمت catCount = 37 دم جي موجوده قيمت = ٻلي ڪلاس ۾ دم جي شروعاتي قيمت


  6. ٻار جي طبقي جي تعمير ڪندڙ Catکي سڏيو ويندو آهي

    ۽ اهو ئي آهي جيڪو هڪ شئي ٺاهڻ جهڙو آهي جاوا ۾!

    مون کي اهو چوڻ گهرجي ته اسان روٽ لرننگ جا وڏا پرستار نه آهيون، پر اهو بهتر آهي ته ترتيب وار variable شروعات ۽ ڪنسٽرڪٽر ڪالن جي ترتيب کي ياد ڪيو وڃي .

    اهو پروگرام جي وهڪري جي توهان جي سمجھ کي تمام گهڻو وڌائيندو، ۽ توهان جي شين جي حالت ڪنهن خاص وقت تي.

    ان کان علاوه، ڪيترائي طبقا وراثت استعمال نٿا ڪن. انهي حالت ۾، بنيادي طبقي سان لاڳاپيل قدم لاڳو نه ٿيندا آهن.

تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION