this
۽
super
جاوا ۾ ٻه خاص لفظ آهن جيڪي ڪلاس ۽ ان جي سپر ڪلاس جي موجوده مثال جي نمائندگي ڪن ٿا. جاوا پروگرامر اڪثر ڪري انهن لفظن کي پريشان ڪندا آهن ۽ انهن جي خاص خاصيتن جي باري ۾ ٿورو شعور ڏيکاريندا آهن، جيڪي اڪثر جاوا ڪور انٽرويوز ۾ پڇيا ويندا آهن. مثال طور، ٻه سوال جيڪي فوري طور تي ذهن ۾ اچن ٿا، بابت آهن
this
۽
super
، ڇا اهو ممڪن آهي ته جاوا ۾ ڪنهن لفظ کي مختلف معنيٰ ڏني وڃي
this
؟
this
۽ ڪي ورڊ ۽ جاوا ۾ ڇا فرق آهي
super
. خبر نه آهي؟ خير، مان هتي جواب نه ڏئي رهيو آهيان - اهو مضمون جي آخر ۾ ڳولي سگهجي ٿو.
تنهن ڪري، جيئن مون شروع ۾ چيو، جاوا ۾
this
۽ وچ ۾ بنيادي فرق اهو آهي ته هڪ طبقي جو موجوده مثال نمائندگي ڪري ٿو، جڏهن ته والدين طبقي جو موجوده مثال نمائندگي ڪري ٿو. هتي متغير استعمال ڪرڻ جو هڪ مثال آهي ۽ - توهان شايد اڳ ۾ ئي ڏٺو آهي مثالن جي تعمير ڪندڙن کي سڏڻ جا هڪ ٻئي کان، جنهن کي سڏيو ويندو آهي. هڪ زنجير ۾ تعمير ڪندڙن کي سڏڻ، اهو ممڪن آهي لفظن جي استعمال ذريعي ۽ . ڪلاس جي اندر، ان جي no-argument Constructor سڏڻ لاءِ، استعمال ڪيو ويندو آهي ، جڏهن ته اهو استعمال ڪيو ويندو آهي no-argument Constructor کي سڏڻ لاءِ، يا جيئن ان کي سڏيو ويندو آهي، پيرن ڪلاس جو ڊفالٽ ڪنسٽرڪٽر. اهڙيءَ طرح، هن طريقي سان توهان نه رڳو بنا ڪنهن دليل جي، پر ڪنهن ٻئي ڪنسٽرڪٽر کي به ان کي مناسب پيرا ميٽرز پاس ڪري سڏي سگهو ٿا. اسان جلد ئي هن استعمال جو هڪ مثال ڏسندا . جاوا ۾ پڻ اهي ڪلاس مثال ۽ ان جي والدين جي متغير تائين رسائي لاءِ استعمال ڪيا ويندا آهن. حقيقت ۾، اهي اڳياڙين کان سواءِ پهچ سگھجن ٿا ۽ ، پر صرف ان صورت ۾ جڏهن موجوده بلاڪ ۾ اهڙا متغير ٻين متغيرن سان اوورليپ نه ٿين، يعني. جيڪڏهن ان ۾ ساڳيا نالن سان مقامي متغير شامل نه آهن، ٻي صورت ۾ توهان کي اڳياڙين سان نالا استعمال ڪرڻا پوندا، پر اهو مسئلو ناهي، ڇاڪاڻ ته هن فارم ۾ اهي اڃا به وڌيڪ پڙهڻ لائق آهن. هن طريقي جو هڪ شاندار مثال ان کي استعمال ڪرڻ آهي هڪ تعمير ڪندڙ اندر جيڪو هڪ پيٽرولر وٺي ٿو ساڳئي نالي سان مثال متغير. بعد ۾ آرٽيڪل ۾ اسان اهو معلوم ڪنداسين ته ٻيا ڪهڙا فرق آهن ۽ جي وچ ۾ ، ۽ انهن جي استعمال جا ڪجهه مثال ڏسو.
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 جو ھڪڙو دليل ٺاھيندڙ ڪلاس بي جو ھڪڙو دليل ٺاھيندڙ ڪلاس بي جو ڪو دليل ٺاھيندڙ
- constructor جي اندر
this
، ۽ super
ٻين سڀني اظهارن جي مٿان ظاهر ٿيڻ گهرجي، بلڪل شروعات ۾، ٻي صورت ۾ مرتب ڪندڙ هڪ غلطي پيغام جاري ڪندو. جنهن مان اهو معلوم ٿئي ٿو ته هڪ تعمير ڪندڙ ٻنهي تي مشتمل نه ٿو ٿي سگهي this()
، ۽ super()
.
سپر ۽ هن جي وچ ۾ فرق
ھاڻي اسان ڄاڻون ٿا ته لفظ ڪيئن استعمال ڪجي
super
۽
this
سمجھو ته انھن جي ضرورت ڇو آھي. پر انهن لفظن کي استعمال ڪرڻ لاءِ هڪ ٻيو آپشن آهي جنهن جو مون ذڪر نه ڪيو آهي - اندروني طبقن ۾، جتي انهن جي مدد سان اوور نوٽشن فارم استعمال ڪندي ٻاهرين طبقي ڏانهن رجوع ڪرڻ تمام آسان آهي.
this
ان جي موجوده مثال ۽ ٻاهرين لاء.
super
- هن جي والدين لاء. اوور کي اوٽ ڪلاس جي نالي سان تبديل ڪرڻ نه وساريو.
this
ھاڻي اچو ته مختصر طور تي لفظن ۽ لفظن جي وچ ۾ بنيادي فرق جي فهرست ڏيون
super
- هڪ متغير
this
ڪلاس جي موجوده مثال ڏانهن اشارو ڪري ٿو جنهن ۾ اهو استعمال ڪيو ويو آهي، جڏهن ته اهو super
والدين طبقي جي موجوده مثال ڏانهن اشارو ڪري ٿو.
- هر تعمير ڪندڙ، ٻين تعمير ڪندڙن کي واضح ڪالن جي غير موجودگي ۾، واضح طور تي
super()
ان جي والدين طبقي جي غير دليل واري تعمير ڪندڙ کي سڏيندو آهي، پر توهان وٽ هميشه ڪنهن ٻئي تعمير ڪندڙ کي واضح طور تي ڪال ڪرڻ جو اختيار آهي this()
، يا super()
.
this
شايد اهو سڀ ڪجهه آهي جيڪو لفظن ۽ جاوا ۾ فرق جي باري ۾ چئي سگهجي ٿو
super
۽ انهن کي پروگرامن ۾ ڪيئن استعمال ڪيو وڃي ٿو. جيئن اسان ڏٺو آهي، انهن جو بنيادي مقصد هڪ تعمير ڪندڙ کي ٻئي کان سڏڻ ۽ موجوده ڪلاس ۽ ان جي والدين طبقي ۾ بيان ڪيل مثال جي متغير ڏانهن اشارو ڪرڻ آهي. اهو نه وساريو ته اهي بلڪل عام متغير نه آهن، ۽ هاڻي - منهنجي سوال جو جواب، جيڪو مون پهرين پيراگراف ۾ پڇيو هو. نه، هڪ متغير کي
this
نئين قيمت مقرر نه ٿي ڪري سگھجي ڇاڪاڻ ته اهو حتمي قرار ڏنو ويو آهي. توھان ھي ڪرڻ جي ڪوشش ڪري سگھوٿا IDE ۾ - توھان کي ملندو ھڪڙي تاليف جي غلطي "توهان ھڪڙي نئين قيمت کي متغير کي تفويض نٿا ڪري سگھو
this
- اھو حتمي قرار ڏنو ويو آھي."
اصل مضمون هتي .
GO TO FULL VERSION