CodeGym /جاوا بلاگ /Random-UR /آپریٹر کا جاوا مثال
John Squirrels
سطح
San Francisco

آپریٹر کا جاوا مثال

گروپ میں شائع ہوا۔
ہائے! آج ہم آپریٹر کی مثال کے بارے میں بات کریں گے، اس کے استعمال کی مثالوں پر غور کریں گے، اور یہ کیسے کام کرتا ہے اس کے کچھ پہلوؤں کو چھوئیں گے:) آپ کو CodeGym کی ابتدائی سطحوں پر اس آپریٹر کا سامنا ہو چکا ہے۔ کیا آپ کو یاد ہے کہ ہمیں اس کی ضرورت کیوں ہے؟ اگر نہیں، تو کوئی فکر نہیں۔ آئیے مل کر یاد کرتے ہیں۔ مثال کے طور پر آپریٹر کو یہ چیک کرنے کے لیے درکار ہے کہ آیا X متغیر کے ذریعے حوالہ دیا گیا کوئی شے کسی Y کلاس کی بنیاد پر بنائی گئی تھی ۔ یہ آسان لگتا ہے۔ ہم اس موضوع پر کیوں واپس آئے ہیں؟ سب سے پہلے، کیونکہ اب آپ جاوا کے وراثت کے طریقہ کار اور OOP کے دیگر اصولوں سے بخوبی واقف ہیں۔ آپریٹر کی مثال اب زیادہ واضح ہو جائے گی اور ہم مزید جدید مثالیں دیکھیں گے کہ اسے کیسے استعمال کیا جاتا ہے۔ چلو! آپریٹر کی مثال کیسے کام کرتی ہے - 1آپ کو شاید یاد ہوگا کہ مثال کے طور پر آپریٹر درست لوٹاتا ہے اگر چیک کی تشخیص درست ہے، یا اگر اظہار غلط ہے تو غلط ۔ اس کے مطابق، یہ عام طور پر ہر قسم کے مشروط اظہار میں ہوتا ہے ( if…else )۔ آئیے کچھ آسان مثالوں سے شروع کریں:

public class Main {

   public static void main(String[] args) {

       Integer x = new Integer(22);

       System.out.println(x instanceof Integer);
   }
}
آپ کے خیال میں کنسول پر کیا دکھایا جائے گا؟ ٹھیک ہے، یہ یہاں واضح ہے۔:) x آبجیکٹ ایک عدد عدد ہے، لہذا نتیجہ درست ہوگا ۔ کنسول آؤٹ پٹ: True آئیے چیک کرنے کی کوشش کریں کہ آیا یہ String ہے :

public class Main {

   public static void main(String[] args) {

       Integer x = new Integer(22);

       System.out.println(x instanceof String); // Error!
   }
}
ہمیں ایک غلطی ہو گئی۔ اور توجہ دیں: مرتب کرنے والے نے کوڈ چلانے سے پہلے غلطی پیدا کی! اس نے فوراً دیکھا کہ Integer اور String خود بخود ایک دوسرے میں تبدیل نہیں ہو سکتے اور وراثت کے ذریعے ان کا تعلق نہیں ہے۔ نتیجتاً، کوئی Integer آبجیکٹ String کی بنیاد پر نہیں بنایا جاتا ۔ یہ آسان ہے اور رن ٹائم کی عجیب غلطیوں سے بچنے میں مدد کرتا ہے، لہذا مرتب کرنے والے نے یہاں ہماری مدد کی :) اب آئیے ان مثالوں پر غور کرنے کی کوشش کریں جو زیادہ مشکل ہیں۔ چونکہ ہم نے وراثت کا ذکر کیا ہے، آئیے درج ذیل چھوٹے نظام کے ساتھ کام کریں:

public class Animal {

}

public class Cat extends Animal {

}

public class MaineCoon extends Cat {

}
ہم پہلے ہی جانتے ہیں کہ جب ہم یہ چیک کرتے ہیں کہ آیا کوئی شے کسی کلاس کی مثال ہے تو instanceof کیسے برتاؤ کرتا ہے، لیکن اگر ہم والدین اور بچے کے رشتے پر غور کریں تو کیا ہوگا؟ مثال کے طور پر، آپ کے خیال میں ان تاثرات سے کیا حاصل ہوگا:

public class Main {

   public static void main(String[] args) {

       Cat cat = new Cat();

       System.out.println(cat instanceof Animal);

       System.out.println(cat instanceof MaineCoon);

   }
}
آؤٹ پٹ: سچا غلط بنیادی سوال جس کا جواب دینے کی ضرورت ہے وہ یہ ہے کہ مثال کے طور پر 'کلاس کی بنیاد پر تخلیق کردہ آبجیکٹ' کی تشریح کیسے ہوتی ہے؟ ' کیٹ انسٹینس آف اینیمل ' کا اندازہ درست ہے ، لیکن یقیناً ہم اس الفاظ میں غلطی تلاش کر سکتے ہیں۔ کیٹ آبجیکٹ کو اینیمل کلاس کی بنیاد پر کیوں بنایا گیا ہے ؟ کیا یہ صرف اپنے طبقے کی بنیاد پر نہیں بنایا گیا؟ جواب کافی آسان ہے، اور آپ نے پہلے ہی اس کے بارے میں سوچا ہوگا۔ اس ترتیب کو یاد رکھیں جس میں کنسٹرکٹرز کو بلایا جاتا ہے اور کسی چیز کو بناتے وقت متغیرات شروع کیے جاتے ہیں۔ ہم نے پہلے ہی کلاس کنسٹرکٹرز کے بارے میں مضمون میں اس موضوع کا احاطہ کیا ہے ۔ یہاں اس سبق سے ایک مثال ہے:

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");
   }
}
اور اگر آپ اسے IDE میں چلاتے ہیں تو کنسول آؤٹ پٹ اس طرح نظر آئے گا: اینیمل بیس کلاس کنسٹرکٹر چل رہا ہے کیا اینیمل کلاس کے متغیرات پہلے ہی شروع ہو چکے ہیں؟ جامد متغیر جانوروں کی موجودہ قیمت شمار = 7700000 جانوروں کی کلاس میں دماغ کی موجودہ قیمت = جانوروں کی کلاس میں دماغ کی ابتدائی قدر جانوروں کی کلاس میں دل کی موجودہ قیمت = جانوروں کی کلاس میں دل کی ابتدائی قدر میں کیٹ کلاس کے متغیر پہلے سے موجود ہیں شروع کیا گیا ہے؟ جامد متغیر کی موجودہ قیمت catCount = 37 اینیمل بیس کلاس کنسٹرکٹر ہو گیا ہے! دماغ کی موجودہ قیمت = دماغ کی موجودہ قیمت دل = دل کی کیٹ کلاس کنسٹرکٹر شروع ہوچکا ہے (جانوروں کا کنسٹرکٹر پہلے ہی ختم ہوچکا ہے) جامد متغیر کی موجودہ قیمت catCount = 37 دم کی موجودہ قیمت = کیٹ کلاس میں دم کی ابتدائی قیمت tail کی موجودہ قیمت = Tail Now کیا آپ کو یاد ہے؟:) بیس کلاس کا کنسٹرکٹر، اگر کوئی بیس کلاس ہے، تو کسی چیز کو بناتے وقت ہمیشہ پہلے کہا جاتا ہے۔ مثال کے طور پر آپریٹر کی رہنمائی اس اصول سے ہوتی ہے جب اس بات کا تعین کرنے کی کوشش کی جاتی ہے کہ آیا A آبجیکٹ B کلاس کی بنیاد پر بنایا گیا تھا ۔ اگر بیس کلاس کنسٹرکٹر کہا جائے تو کوئی شک نہیں رہ سکتا۔ دوسرے چیک کے ساتھ، سب کچھ آسان ہے:

System.out.println(cat instanceof MaineCoon);
MaineCoon کنسٹرکٹر کو بلایا نہیں گیا تھا جب Cat آبجیکٹ بنایا گیا تھا ، جو سمجھ میں آتا ہے۔ سب کے بعد، MaineCoon Cat کی اولاد ہے ، ایک آباؤ اجداد نہیں۔ اور یہ بلی کے لیے کوئی ٹیمپلیٹ نہیں ہے ۔ ٹھیک ہے، مجھے لگتا ہے کہ ہم اس پر واضح ہیں۔ لیکن اگر ہم ایسا کرتے ہیں تو کیا ہوگا؟:

public class Main {

   public static void main(String[] args) {

       Cat cat = new MaineCoon();

       System.out.println(cat instanceof Cat);
       System.out.println(cat instanceof MaineCoon);


   }
}
ہمم... اب یہ مشکل ہے۔ آئیے اس پر بات کرتے ہیں۔ ہمارے پاس ایک Cat متغیر ہے جس کو ہم نے MaineCoon آبجیکٹ تفویض کیا ہے۔ ویسے، یہ بھی کام کیوں کرتا ہے؟ ہم ایسا کر سکتے ہیں، ٹھیک ہے؟ ہاں ہم کر سکتے ہیں. سب کے بعد، ہر MaineCoon ایک بلی ہے. اگر یہ مکمل طور پر واضح نہیں ہے تو، قدیم اقسام کو وسیع کرنے کی مثال یاد رکھیں:

public class Main {

   public static void main(String[] args) {

       long x = 1024;

   }
}
نمبر 1024 ایک مختصر ہے : یہ آسانی سے ایک لمبے متغیر میں فٹ ہوجاتا ہے، کیونکہ اسے ایڈجسٹ کرنے کے لیے کافی بائٹس موجود ہیں (گڑیا کے ساتھ مثال یاد رکھیں؟) ایک نسلی آبجیکٹ ہمیشہ ایک آبائی متغیر کو تفویض کیا جا سکتا ہے۔ ابھی کے لیے، بس اسے یاد رکھیں، اور اس کے بعد کے اسباق میں ہم تجزیہ کریں گے کہ یہ کیسے کام کرتا ہے۔ تو ہماری مثال کی پیداوار کیا ہے؟

Cat cat = new MaineCoon();
System.out.println(cat instanceof Cat);
System.out.println(cat instanceof MaineCoon);
چیک کی مثال کیا ہوگی ؟ ہماری بلی متغیر یا ہماری MaineCoon آبجیکٹ؟ جواب یہ ہے کہ یہ سوال دراصل سادہ ہے۔ آپ کو صرف آپریٹر کی تعریف کو دوبارہ پڑھنے کی ضرورت ہے: مثال کے طور پر آپریٹر کو یہ چیک کرنے کے لیے درکار ہے کہ آیا کسی X متغیر کے ذریعہ حوالہ کردہ آبجیکٹ کچھ Y کلاس کی بنیاد پر بنایا گیا تھا ۔ مثال کے طور پر آپریٹر کسی چیز کی اصلیت کی جانچ کرتا ہے، متغیر قسم کی نہیں۔ اس طرح، اس مثال میں، ہمارا پروگرام دونوں صورتوں میں درست ظاہر کرے گا : ہمارے پاس MaineCoon آبجیکٹ ہے۔ ظاہر ہے، یہ MaineCoon کلاس کی بنیاد پر بنایا گیا تھا ، لیکن یہ کیٹ پیرنٹ کلاس کی بنیاد پر بھی بنایا گیا تھا!
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION