JavaRush /جاوا بلاگ /Random-UR /جاوا میں اس اور سپر کلیدی الفاظ کے درمیان فرق
grishin
سطح
Харьков

جاوا میں اس اور سپر کلیدی الفاظ کے درمیان فرق

گروپ میں شائع ہوا۔
thisاور superجاوا میں دو خاص کلیدی الفاظ ہیں جو بالترتیب کلاس اور اس کے سپر کلاس کی موجودہ مثال کی نمائندگی کرتے ہیں۔ جاوا پروگرامرز اکثر ان الفاظ کو الجھاتے ہیں اور اپنی خاص خصوصیات کے بارے میں بہت کم آگاہی ظاہر کرتے ہیں، جن کے بارے میں اکثر جاوا کور انٹرویوز میں پوچھا جاتا ہے۔ مثال کے طور پر، کچھ سوالات جو فوراً ذہن میں آتے ہیں thisاور کے بارے میں ہیں، کیا جاوا میں superکسی کلیدی لفظ کو مختلف معنی تفویض کرنا ممکن ہے ؟ اور کلیدی الفاظ اور جاوا میں thisکیا فرق ہے ۔ نہیں جانتا؟ ٹھیک ہے، میں یہاں جواب نہیں دے رہا ہوں - یہ مضمون کے آخر میں پایا جا سکتا ہے. لہذا، جیسا کہ میں نے شروع میں کہا، جاوا میں اور کے درمیان بنیادی فرق یہ ہے کہ کلاس کی موجودہ مثال نمائندگی کرتی ہے، جبکہ پیرنٹ کلاس کی موجودہ مثال کی نمائندگی کرتی ہے۔ یہاں متغیرات کے استعمال کی ایک مثال ہے اور - آپ نے شاید پہلے ہی ایک دوسرے سے کنسٹرکٹرز کو کال کرنے کی مثالیں دیکھی ہوں گی، نام نہاد۔ کنسٹرکٹرز کو ایک زنجیر میں بلانا، یہ کلیدی الفاظ اور کے استعمال سے ممکن ہے ۔ کلاس کے اندر، اس کے بغیر دلیل کنسٹرکٹر کو کہنے کے لیے، استعمال کیا جاتا ہے ، جب کہ اسے no-argument کنسٹرکٹر، یا جیسا کہ اسے پیرنٹ کلاس کا ڈیفالٹ کنسٹرکٹر بھی کہا جاتا ہے۔ ویسے، اس طرح سے آپ نہ صرف کسی کنسٹرکٹر کو بغیر دلائل کے کال کر سکتے ہیں، بلکہ کسی دوسرے کنسٹرکٹر کو بھی مناسب پیرامیٹرز پاس کر کے کال کر سکتے ہیں۔ ہم جلد ہی اس استعمال کی ایک مثال دیکھیں گے ۔ جاوا میں بھی وہ کلاس مثال اور اس کے والدین کے متغیرات تک رسائی کے لیے استعمال ہوتے ہیں۔ درحقیقت، ان تک سابقہ ​​کے بغیر رسائی حاصل کی جا سکتی ہے اور ، لیکن صرف اس صورت میں جب موجودہ بلاک میں ایسے متغیرات دوسرے متغیرات کے ساتھ اوورلیپ نہ ہوں، یعنی اگر اس میں ایک جیسے ناموں کے ساتھ مقامی متغیرات شامل نہیں ہیں، بصورت دیگر آپ کو سابقہ ​​​​کے ساتھ نام استعمال کرنا ہوں گے، لیکن اس سے کوئی فرق نہیں پڑتا، کیونکہ اس شکل میں وہ اور بھی زیادہ پڑھنے کے قابل ہیں۔ اس نقطہ نظر کی ایک عمدہ مثال یہ ہے کہ اسے ایک کنسٹرکٹر کے اندر استعمال کیا جائے جو مثال کے متغیر کے نام کے ساتھ ایک پیرامیٹر لیتا ہے۔ بعد میں مضمون میں ہم یہ جانیں گے کہ اور کے درمیان اور کیا فرق ہیں ، اور ان کے استعمال کی کچھ مثالیں دیکھیں۔ thissuperجاوا میں اس اور سپر کلیدی الفاظ کے درمیان فرق - 1thissuperthissuperthissuperthissuperthis()super()thissuperthissupersuperthisthissuperthis

یہ اور سپر کیسے ایک جیسے ہیں۔

thisمطلوبہ الفاظ اور کے درمیان فرق کو دیکھنے سے پہلے super، آئیے ان کی کچھ مماثلتوں کو دیکھیں:
  1. دونوں this، اور superغیر جامد متغیرات ہیں، اس لیے انہیں جامد سیاق و سباق میں استعمال نہیں کیا جا سکتا، جس کا مطلب ہے کہ وہ مرکزی طریقہ میں استعمال نہیں ہو سکتے۔ اس کے نتیجے میں ایک مرتب وقت کی خرابی ہوگی "ایک غیر جامد متغیر کو thisجامد سیاق و سباق سے حوالہ نہیں دیا جاسکتا"۔ اگر آپ کلیدی لفظ کو مین میتھڈ میں استعمال کرتے ہیں تو ایسا ہی ہوتا ہے super۔

  2. دونوں this، اور superکنسٹرکٹرز کے اندر دوسرے کنسٹرکٹرز کو ایک سلسلہ میں کال کرنے کے لیے استعمال کیا جا سکتا ہے، مثال کے طور پر، this() اور super() بالترتیب وراثت اور پیرنٹ کلاسز کے دلائل کے بغیر کنسٹرکٹر کو کال کریں۔
ذیل کی مثال میں، ہم سب سے پہلے کلاس B کے بغیر دلیل کنسٹرکٹر سے اسی کلاس B کے کنسٹرکٹر کو کال بھیجتے ہیں جو کہ قسم کا ایک پیرامیٹر لیتا ہے String، جس کے نتیجے میں super("")ون آرگیومنٹ کنسٹرکٹر کو سپر کلاس سے کال کرتا ہے۔
class A{

    A(){
        System.out.println("Конструктор без аргументов класса A");
    }

    A(String args){
        System.out.println("Конструктор с одним аргументом класса A");
    }
}

class B extends A{

   B(){
        this(""); // вызов конструктора с одним аргументом класса B
        System.out.println("Конструктор без аргументов класса B");
    }

   B(String args){
        super(""); // вызов конструктора с одним аргументом класса A
        System.out.println("Конструктор с одним аргументом класса B");
    }
}

// Тест-класс и вывод
public class Test {

    public static void main(String args[]) {
       B b = new B();
    }

}
آؤٹ پٹ: کلاس A کا ایک دلیل کنسٹرکٹر کلاس B کا ایک دلیل کنسٹرکٹر کلاس B کا کوئی دلیل کنسٹرکٹر
  1. کنسٹرکٹر کے اندر this، اور superدوسرے تمام تاثرات کے اوپر ظاہر ہونا چاہیے، بالکل شروع میں، بصورت دیگر کمپائلر ایک غلطی کا پیغام جاری کرے گا۔ جس سے یہ معلوم ہوتا ہے کہ ایک کنسٹرکٹر دونوں پر مشتمل نہیں ہو سکتا this()اور super().

سپر اور اس کے درمیان فرق

اب ہم جانتے ہیں کہ مطلوبہ الفاظ کو کس طرح استعمال کرنا ہے superاور thisان کی ضرورت کیوں ہے۔ لیکن ان مطلوبہ الفاظ کو استعمال کرنے کے لیے ایک اور آپشن ہے جس کا میں نے ذکر نہیں کیا - اندرونی کلاسوں میں، جہاں ان کی مدد سے آؤٹر نوٹیشن فارم کا استعمال کرتے ہوئے بیرونی کلاس کا حوالہ دینا بہت آسان ہے۔ thisاس کی موجودہ مثال اور بیرونی کے لیے۔ super- اس کے والدین کے لیے۔ آؤٹر کو آؤٹر کلاس کے نام سے بدلنا نہ بھولیں۔ آئیے اب مختصراً مطلوبہ الفاظ thisاور کے درمیان بنیادی فرق کو درج کرتے ہیں۔super
  1. ایک متغیر سے thisمراد اس کلاس کی موجودہ مثال ہے جس میں اسے استعمال کیا جاتا ہے، جبکہ اس superسے مراد پیرنٹ کلاس کی موجودہ مثال ہے۔

  2. ہر کنسٹرکٹر، دوسرے کنسٹرکٹرز کو واضح کالوں کی غیر موجودگی میں، super()اپنے پیرنٹ کلاس کے بغیر دلیل کنسٹرکٹر کو واضح طور پر کال کرتا ہے، لیکن آپ کے پاس ہمیشہ کسی دوسرے کنسٹرکٹر کو واضح طور پر یا تو، this()یا کے ساتھ کال کرنے کا اختیار ہوتا ہے super()۔
thisمطلوبہ الفاظ اور superجاوا کے درمیان فرق اور پروگراموں میں ان کے استعمال کے بارے میں شاید یہی کہا جا سکتا ہے ۔ جیسا کہ ہم نے دیکھا، ان کا بنیادی مقصد ایک کنسٹرکٹر کو دوسرے سے کال کرنا اور موجودہ کلاس اور اس کی پیرنٹ کلاس میں اعلان کردہ مثال کے متغیرات کا حوالہ دینا ہے۔ یہ مت بھولنا کہ یہ بالکل عام متغیرات نہیں ہیں، اور اب - میرے سوال کا جواب، جو میں نے پہلے پیراگراف میں پوچھا تھا۔ نہیں، متغیر کو thisنئی قدر تفویض نہیں کی جا سکتی کیونکہ اسے حتمی قرار دیا گیا ہے۔ آپ IDE میں ایسا کرنے کی کوشش کر سکتے ہیں - آپ کو ایک تالیف کی خرابی موصول ہوگی "آپ متغیر کو نئی قدر تفویض نہیں کر سکتے ہیں this- اسے حتمی قرار دیا گیا ہے۔" اصل مضمون یہاں ۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION