this
اور
super
جاوا میں دو خاص کلیدی الفاظ ہیں جو بالترتیب کلاس اور اس کے سپر کلاس کی موجودہ مثال کی نمائندگی کرتے ہیں۔ جاوا پروگرامرز اکثر ان الفاظ کو الجھاتے ہیں اور اپنی خاص خصوصیات کے بارے میں بہت کم آگاہی ظاہر کرتے ہیں، جن کے بارے میں اکثر جاوا کور انٹرویوز میں پوچھا جاتا ہے۔ مثال کے طور پر، کچھ سوالات جو فوراً ذہن میں آتے ہیں
this
اور کے بارے میں ہیں، کیا جاوا میں
super
کسی کلیدی لفظ کو مختلف معنی تفویض کرنا ممکن ہے ؟ اور کلیدی الفاظ اور جاوا میں
this
کیا فرق ہے ۔ نہیں جانتا؟ ٹھیک ہے، میں یہاں جواب نہیں دے رہا ہوں - یہ مضمون کے آخر میں پایا جا سکتا ہے. لہذا، جیسا کہ میں نے شروع میں کہا، جاوا میں اور کے درمیان بنیادی فرق یہ ہے کہ کلاس کی موجودہ مثال نمائندگی کرتی ہے، جبکہ پیرنٹ کلاس کی موجودہ مثال کی نمائندگی کرتی ہے۔ یہاں متغیرات کے استعمال کی ایک مثال ہے اور - آپ نے شاید پہلے ہی ایک دوسرے سے کنسٹرکٹرز کو کال کرنے کی مثالیں دیکھی ہوں گی، نام نہاد۔ کنسٹرکٹرز کو ایک زنجیر میں بلانا، یہ کلیدی الفاظ اور کے استعمال سے ممکن ہے ۔ کلاس کے اندر، اس کے بغیر دلیل کنسٹرکٹر کو کہنے کے لیے، استعمال کیا جاتا ہے ، جب کہ اسے no-argument کنسٹرکٹر، یا جیسا کہ اسے پیرنٹ کلاس کا ڈیفالٹ کنسٹرکٹر بھی کہا جاتا ہے۔ ویسے، اس طرح سے آپ نہ صرف کسی کنسٹرکٹر کو بغیر دلائل کے کال کر سکتے ہیں، بلکہ کسی دوسرے کنسٹرکٹر کو بھی مناسب پیرامیٹرز پاس کر کے کال کر سکتے ہیں۔ ہم جلد ہی اس استعمال کی ایک مثال دیکھیں گے ۔ جاوا میں بھی وہ کلاس مثال اور اس کے والدین کے متغیرات تک رسائی کے لیے استعمال ہوتے ہیں۔ درحقیقت، ان تک سابقہ کے بغیر رسائی حاصل کی جا سکتی ہے اور ، لیکن صرف اس صورت میں جب موجودہ بلاک میں ایسے متغیرات دوسرے متغیرات کے ساتھ اوورلیپ نہ ہوں، یعنی اگر اس میں ایک جیسے ناموں کے ساتھ مقامی متغیرات شامل نہیں ہیں، بصورت دیگر آپ کو سابقہ کے ساتھ نام استعمال کرنا ہوں گے، لیکن اس سے کوئی فرق نہیں پڑتا، کیونکہ اس شکل میں وہ اور بھی زیادہ پڑھنے کے قابل ہیں۔ اس نقطہ نظر کی ایک عمدہ مثال یہ ہے کہ اسے ایک کنسٹرکٹر کے اندر استعمال کیا جائے جو مثال کے متغیر کے نام کے ساتھ ایک پیرامیٹر لیتا ہے۔ بعد میں مضمون میں ہم یہ جانیں گے کہ اور کے درمیان اور کیا فرق ہیں ، اور ان کے استعمال کی کچھ مثالیں دیکھیں۔
this
super
this
super
this
super
this
super
this
super
this()
super()
this
super
this
super
super
this
this
super
this
یہ اور سپر کیسے ایک جیسے ہیں۔
this
مطلوبہ الفاظ اور کے درمیان فرق کو دیکھنے سے پہلے
super
، آئیے ان کی کچھ مماثلتوں کو دیکھیں:
- دونوں
this
، اور super
غیر جامد متغیرات ہیں، اس لیے انہیں جامد سیاق و سباق میں استعمال نہیں کیا جا سکتا، جس کا مطلب ہے کہ وہ مرکزی طریقہ میں استعمال نہیں ہو سکتے۔ اس کے نتیجے میں ایک مرتب وقت کی خرابی ہوگی "ایک غیر جامد متغیر کو this
جامد سیاق و سباق سے حوالہ نہیں دیا جاسکتا"۔ اگر آپ کلیدی لفظ کو مین میتھڈ میں استعمال کرتے ہیں تو ایسا ہی ہوتا ہے super
۔
- دونوں
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("");
System.out.println("Конструктор без аргументов класса B");
}
B(String args){
super("");
System.out.println("Конструктор с одним аргументом класса B");
}
}
public class Test {
public static void main(String args[]) {
B b = new B();
}
}
آؤٹ پٹ: کلاس A کا ایک دلیل کنسٹرکٹر کلاس B کا ایک دلیل کنسٹرکٹر کلاس B کا کوئی دلیل کنسٹرکٹر
- کنسٹرکٹر کے اندر
this
، اور super
دوسرے تمام تاثرات کے اوپر ظاہر ہونا چاہیے، بالکل شروع میں، بصورت دیگر کمپائلر ایک غلطی کا پیغام جاری کرے گا۔ جس سے یہ معلوم ہوتا ہے کہ ایک کنسٹرکٹر دونوں پر مشتمل نہیں ہو سکتا this()
اور super()
.
سپر اور اس کے درمیان فرق
اب ہم جانتے ہیں کہ مطلوبہ الفاظ کو کس طرح استعمال کرنا ہے
super
اور
this
ان کی ضرورت کیوں ہے۔ لیکن ان مطلوبہ الفاظ کو استعمال کرنے کے لیے ایک اور آپشن ہے جس کا میں نے ذکر نہیں کیا - اندرونی کلاسوں میں، جہاں ان کی مدد سے آؤٹر نوٹیشن فارم کا استعمال کرتے ہوئے بیرونی کلاس کا حوالہ دینا بہت آسان ہے۔
this
اس کی موجودہ مثال اور بیرونی کے لیے۔
super
- اس کے والدین کے لیے۔ آؤٹر کو آؤٹر کلاس کے نام سے بدلنا نہ بھولیں۔ آئیے اب مختصراً مطلوبہ الفاظ
this
اور کے درمیان بنیادی فرق کو درج کرتے ہیں۔
super
- ایک متغیر سے
this
مراد اس کلاس کی موجودہ مثال ہے جس میں اسے استعمال کیا جاتا ہے، جبکہ اس super
سے مراد پیرنٹ کلاس کی موجودہ مثال ہے۔
- ہر کنسٹرکٹر، دوسرے کنسٹرکٹرز کو واضح کالوں کی غیر موجودگی میں،
super()
اپنے پیرنٹ کلاس کے بغیر دلیل کنسٹرکٹر کو واضح طور پر کال کرتا ہے، لیکن آپ کے پاس ہمیشہ کسی دوسرے کنسٹرکٹر کو واضح طور پر یا تو، this()
یا کے ساتھ کال کرنے کا اختیار ہوتا ہے super()
۔
this
مطلوبہ الفاظ اور
super
جاوا کے درمیان فرق اور پروگراموں میں ان کے استعمال کے بارے میں شاید یہی کہا جا سکتا ہے ۔ جیسا کہ ہم نے دیکھا، ان کا بنیادی مقصد ایک کنسٹرکٹر کو دوسرے سے کال کرنا اور موجودہ کلاس اور اس کی پیرنٹ کلاس میں اعلان کردہ مثال کے متغیرات کا حوالہ دینا ہے۔ یہ مت بھولنا کہ یہ بالکل عام متغیرات نہیں ہیں، اور اب - میرے سوال کا جواب، جو میں نے پہلے پیراگراف میں پوچھا تھا۔ نہیں، متغیر کو
this
نئی قدر تفویض نہیں کی جا سکتی کیونکہ اسے حتمی قرار دیا گیا ہے۔ آپ IDE میں ایسا کرنے کی کوشش کر سکتے ہیں - آپ کو ایک تالیف کی خرابی موصول ہوگی "آپ متغیر کو نئی قدر تفویض نہیں کر سکتے ہیں
this
- اسے حتمی قرار دیا گیا ہے۔"
اصل مضمون یہاں ۔
GO TO FULL VERSION