CodeGym /جاوا بلاگ /Random-UR /جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات ا...
John Squirrels
سطح
San Francisco

جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات اور جوابات تلاش کرنا۔ حصہ 5

گروپ میں شائع ہوا۔
ہیلو ہیلو! جاوا ڈویلپرز کی آج بہت زیادہ مانگ ہے۔ بلاشبہ، میں آپ کو نوکری کے مواقع فراہم نہیں کر سکتا، لیکن میں آپ کو کچھ نیا علم حاصل کرنے اور کچھ خلا کو پر کرنے میں مدد کرنے کی کوشش کروں گا۔ تو آئیے جاوا ڈویلپر انٹرویو کے سوالات کا اپنا جائزہ جاری رکھیں۔ آپ مضمون کے آخر میں جائزے کے پچھلے حصوں کے لنکس تلاش کر سکتے ہیں۔ جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات اور جوابات تلاش کرنا۔  حصہ 5 - 1

39. جاوا میں رسائی میں ترمیم کرنے والے کیا ہیں؟ ان کا نام بتائیں۔ وہ کس لیے استعمال ہوتے ہیں؟

میں نے پہلے جاوا کے عناصر کے بارے میں ایک سوال میں رسائی میں ترمیم کرنے والوں کا احاطہ کیا تھا جو encapsulation کو حاصل کرنے کے لیے استعمال کیا جاتا تھا۔ لیکن پھر بھی، میں آپ کو یاد دلا دوں گا۔ جاوا میں رسائی میں ترمیم کرنے والے کلیدی الفاظ ہیں جو جاوا کے کسی خاص جزو کو دی گئی رسائی کی سطح کو بیان کرتے ہیں۔ درج ذیل رسائی میں ترمیم کرنے والے موجود ہیں:
  • عوامی - اس ترمیم کنندہ کے ساتھ نشان زد ایک عنصر عوامی ہے۔ دوسرے الفاظ میں، فیلڈز اور طریقے، اور پبلک موڈیفائر کے ساتھ اعلان کردہ کلاسز دیگر کلاسز کو ان کے اپنے پیکج میں اور بیرونی پیکجوں میں نظر آتی ہیں۔
  • محفوظ — اس ترمیم کار کے ساتھ نشان زد ایک عنصر موجودہ پیکج یا اخذ کردہ کلاسوں میں اس کی اپنی کلاس میں کہیں سے بھی قابل رسائی ہے، چاہے وہ دوسرے پیکجوں میں ہی کیوں نہ ہوں۔
  • پہلے سے طے شدہ (یا بالکل بھی کوئی ترمیم کنندہ نہیں) واضح طور پر لاگو ہوتا ہے جب کوئی رسائی ترمیم کنندہ اشارہ نہیں کیا جاتا ہے۔ یہ پچھلے کی طرح ہے، سوائے اس کے کہ یہ دوسرے پیکجوں میں پائی جانے والی اخذ شدہ کلاسوں میں نظر آتا ہے۔
  • نجی - یہ تمام ترمیم کنندگان میں سب سے زیادہ نجی ہے۔ یہ صرف موجودہ کلاس کے اندر کسی عنصر تک رسائی کی اجازت دیتا ہے۔

40. جامد اور غیر جامد طریقوں کی اہم خصوصیات کے نام بتائیں

بنیادی فرق یہ ہے کہ جامد طریقے کلاس سے تعلق رکھتے ہیں۔ درحقیقت، آپ کو اس کلاس کی مثال بنانے کی ضرورت نہیں ہے — جامد طریقوں کو صرف کلاس کی قسم سے بلایا جا سکتا ہے۔ مثال کے طور پر، فرض کریں کہ ہمارے پاس بلی کو پالنے کا ایک جامد طریقہ ہے:
public class CatService {
   public static void petTheCat(Cat cat) {
       System.out.println("Pet the cat: " + cat.getName());
   }
ہمیں اسے کال کرنے کے لیے CatService کلاس کی مثال کی ضرورت نہیں ہے :
Cat cat = new Cat(7, "Bobby");
CatService.petTheCat(cat);
اس کے برعکس، عام طریقے کسی چیز کے پابند ہوتے ہیں (متعلق)۔ ان کو کال کرنے کے لیے، آپ کے پاس ایک مثال (آبجیکٹ) ہونی چاہیے جس پر طریقہ کہا جائے گا۔ مثال کے طور پر، فرض کریں کہ ہماری بلی کے پاس غیر جامد طریقہ ہے meow() :
class Cat {
   public void meow() {
       System.out.println("Meow! Meow! Meow!");
   }
اس طریقہ کو کال کرنے کے لیے، ہمیں بلی کی ایک مخصوص مثال کی ضرورت ہے:
Cat cat = new Cat(7, "Bobby");
cat.meow();

41. کون سی بنیادی پابندیاں ہیں جو جامد اور غیر جامد طریقوں پر لاگو ہوتی ہیں؟

جیسا کہ میں نے پہلے کہا، ایک عام (غیر جامد) طریقہ کی بنیادی حد یہ ہے کہ ہمیشہ کوئی نہ کوئی مثال ہونی چاہیے جس پر طریقہ کہا جاتا ہے۔ لیکن ایک جامد طریقہ کو اس کی ضرورت نہیں ہے۔ مزید برآں، ایک جامد طریقہ کسی شے کے عناصر کے لیے اس حوالہ کو استعمال نہیں کر سکتا کیونکہ اب اس طریقہ کے لیے ایک موجودہ شے موجود ہے۔

42. جامد کلیدی لفظ کا کیا مطلب ہے؟ کیا جامد طریقہ کو اوور رائیڈ یا اوور لوڈ کیا جا سکتا ہے؟

جامد کلیدی لفظ کے ساتھ نشان زد ایک عنصر کا تعلق کلاس کی مثال سے نہیں ہے بلکہ خود کلاس سے ہے۔ جب کلاس خود لوڈ ہوتی ہے تو یہ لوڈ ہوتا ہے۔ جامد عناصر پورے پروگرام کے لیے یکساں ہیں، جبکہ غیر جامد عناصر صرف ایک مخصوص شے کے لیے ایک جیسے ہیں۔ مندرجہ ذیل عناصر جامد ہوسکتے ہیں:
  • ایک کلاس کے میدان؛
  • کلاس کے ابتدائی بلاک؛
  • کلاس کا ایک طریقہ؛
  • ایک طبقے کی نیسٹڈ کلاسز (یقیناً، یہ بھی ایک ٹاٹولوجی ہے)۔
ایک جامد طریقہ کو اوور رائڈ نہیں کیا جا سکتا: اس کا تعلق کلاس سے ہے اور اسے وراثت میں نہیں ملا ہے، لیکن ساتھ ہی اسے اوور لوڈ کیا جا سکتا ہے۔

43. کیا کوئی طریقہ ایک ہی وقت میں جامد اور تجریدی ہو سکتا ہے؟

میں نے پہلے ہی ایک پچھلے مضمون میں اس کا جواب دیا ہے: ایک طریقہ ایک ہی وقت میں تجریدی اور جامد نہیں ہوسکتا ہے۔ اگر کوئی طریقہ خلاصہ ہے، تو اس کا مطلب یہ ہے کہ اسے چائلڈ کلاس میں اوور رائڈ کیا جانا چاہیے۔ لیکن ایک جامد طریقہ کلاس سے تعلق رکھتا ہے، اور اسے اوور رائڈ نہیں کیا جا سکتا۔ اس سے ایک تضاد پیدا ہوتا ہے، جسے مرتب کرنے والا محسوس کرے گا اور پریشان ہو جائے گا۔ اگر آپ خود کو اس صورتحال میں پاتے ہیں، تو آپ کو اپنی درخواست کے فن تعمیر کی درستگی کے بارے میں سنجیدگی سے سوچنا چاہیے (اشارہ: اس میں کچھ واضح طور پر غلط ہے)۔ جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات اور جوابات تلاش کرنا۔  حصہ 5 - 2

44. کیا غیر جامد طریقوں کے درمیان میں جامد طریقے استعمال کیے جا سکتے ہیں؟ اور اس کے برعکس؟ کیوں؟

ہم جامد طریقوں کو غیر جامد طریقوں میں استعمال کرسکتے ہیں۔ اس سے کچھ نہیں روکتا۔ اس نے کہا، اس کے برعکس ممکن نہیں ہے: ایک جامد طریقہ کلاس کی کسی مخصوص مثال کا حوالہ دیئے بغیر غیر جامد طریقہ استعمال نہیں کرسکتا۔ یاد رکھیں، کلاس کے جامد ممبران کو اس حوالہ تک رسائی حاصل نہیں ہے: آپ کے پاس کلاس کی زیادہ سے زیادہ ٹھوس اشیاء ہو سکتی ہیں جتنی آپ چاہیں، اور ان میں سے ہر ایک اس حوالہ پر مشتمل ہوگا ، جو کہ ایک خود حوالہ ہے۔ تو یہ کیسے طے کیا جائے کہ کون سا حوالہ استعمال کرنا ہے؟ اہ، آپ نہیں کرتے۔ اسی لیے جامد عناصر کسی مخصوص شے کے حوالے کے بغیر غیر جامد عناصر کا حوالہ نہیں دے سکتے۔ بنیادی طور پر، ایک جامد طریقہ ایک غیر جامد طریقہ استعمال کر سکتا ہے صرف اس صورت میں جب اس میں کسی خاص چیز کا حوالہ ہو۔ مثال کے طور پر، ایک جو طریقہ دلیل کے طور پر آیا ہے:
public static void petTheCat(Cat cat) {
   System.out.println("Pet the cat: " + cat.getName());
}
یہاں ہم دیکھتے ہیں کہ جامد petTheCat() طریقہ میں getName کال کرتا ہے، جو کہ Cat آبجیکٹ کا ایک عام غیر جامد طریقہ ہے ۔

45. انٹرفیس کیا ہے؟ کیا کوئی حتمی انٹرفیس ہو سکتا ہے؟

ہم یاد کریں گے کہ جاوا میں متعدد وراثت نہیں ہے۔ انٹرفیس اس کا متبادل ہیں۔ ایک انٹرفیس ایک بہت ہی سٹرپڈ ڈاون کلاس کی طرح ہے۔ وہ فعالیت کی وضاحت کرتے ہیں لیکن ٹھوس نفاذ نہیں۔ یہ کام ان کلاسوں پر چھوڑ دیا جاتا ہے جو ان انٹرفیس کو نافذ کرتی ہیں۔ انٹرفیس کی مثال:
public interface Animal {
    void speak();
}
کلاس کے ذریعہ انٹرفیس کے نفاذ کی مثال
class Cat implements Animal {

   @Override
   public void speak() {
       System.out.println("Meow! Meow! Meow!");
   }
}
انٹرفیس استعمال کرنے کے بارے میں جاننے کے لیے اہم اہم چیز یہ ہے:
  1. انٹرفیس کے طریقوں میں صرف ایک ہیڈر ہونا چاہیے۔ ان کے پاس مخصوص طریقہ کار کا باڈی نہیں ہونا چاہیے، یعنی وہ خلاصہ ہونا چاہیے (حالانکہ وہ خلاصہ مطلوبہ لفظ استعمال نہیں کرتے ہیں )۔ مستثنیات ہیں: جامد طریقے اور پہلے سے طے شدہ طریقے، جن کے لیے میتھڈ باڈی کی ضرورت ہوتی ہے۔

  2. ایک کلاس بہت سے انٹرفیس کو نافذ کر سکتی ہے (جیسا کہ میں نے کہا، انٹرفیس ایک سے زیادہ وراثت کا متبادل ہیں)۔ انٹرفیس کے ناموں کو میتھڈ ہیڈر میں کوما کے ذریعے الگ کیا گیا ہے: کلاس شیر انیمل، وائلڈ کو نافذ کرتا ہے ۔

  3. انٹرفیس انٹرفیس کلیدی لفظ کا استعمال کرتے ہوئے بنائے جاتے ہیں۔

  4. جب کوئی کلاس انٹرفیس کو لاگو کرتی ہے، تو ہم امپلی کی ورڈ استعمال کرتے ہیں۔

  5. ایک کلاس جو ایک مخصوص انٹرفیس کو لاگو کرتی ہے اسے اپنے تمام تجریدی طریقوں کو نافذ کرنا چاہیے، یا خود کو خلاصہ قرار دینا چاہیے۔

  6. انٹرفیس استعمال کرنے کا بنیادی مقصد پولیمورفزم کو نافذ کرنا ہے (کسی چیز کو کئی شکلیں اختیار کرنے کی صلاحیت فراہم کرنا)۔

  7. ایک اصول کے طور پر، طریقوں کے لیے رسائی میں ترمیم کرنے والوں کو انٹرفیس میں اشارہ نہیں کیا جاتا ہے: وہ بطور ڈیفالٹ عوامی ہوتے ہیں، اور آپ عوامی کے علاوہ کسی اور ترمیم کار کی وضاحت نہیں کر سکتے ۔ جاوا 9 سے شروع کرتے ہوئے، آپ طریقوں پر پرائیویٹ موڈیفائر استعمال کر سکتے ہیں۔

  8. پہلے سے طے شدہ طور پر، انٹرفیس متغیر جامد حتمی ہوتے ہیں ۔ دوسرے الفاظ میں، وہ مستقل ہیں - انہیں ہمیشہ انٹرفیس میں براہ راست شروع کیا جانا چاہئے۔

  9. آپ انٹرفیس کی مثال نہیں بنا سکتے۔

اس سوال کا جواب کہ آیا انٹرفیس حتمی ہو سکتے ہیں، یقیناً نہیں۔ درحقیقت، انٹرفیس رکھنے کا پورا نقطہ ان پر عمل درآمد کرنا ہے۔ اور جیسا کہ ہم سب کو اچھی طرح یاد ہے، کلاس کی سطح پر حتمی ترمیم کرنے والا کلاس کو وراثتی نہیں بناتا، اور انٹرفیس کی صورت میں - قابل عمل نہیں۔ ہمیں ایک انٹرفیس کی ضرورت کیوں پڑے گی جسے ہم لاگو اور استعمال نہیں کرسکتے ہیں؟ آپ ٹھیک کہتے ہیں - ہم ایسا نہیں کریں گے! اور مرتب کرنے والا متفق ہے۔ :) جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات اور جوابات تلاش کرنا۔  حصہ 5 - 3دراصل، جاوا 8 کے بعد سے جامد انٹرفیس کے طریقوں کے تعارف کے ساتھ، ایک نقطہ ہو سکتا ہے، لیکن یہ اس حقیقت کو تبدیل نہیں کرتا ہے کہ انٹرفیس حتمی نہیں ہو سکتا۔ میں نے صرف انٹرفیس کے بارے میں بہت سطحی بات کی ہے، کیونکہ یہ ایک وسیع موضوع ہے۔ اس کے بارے میں مزید جاننے کے لیے، جاوا میں انٹرفیس پر مضامین اور خلاصہ کلاسز اور انٹرفیس کے درمیان فرق دیکھیں ۔

46. ​​جامد فیلڈز کو کہاں سے شروع کیا جا سکتا ہے؟

جامد شعبوں کو شروع کیا جا سکتا ہے:
  • اعلان کے فوراً بعد، مساوی نشان ( = ) کا استعمال کرتے ہوئے
  • ایک جامد ابتدائی بلاک میں؛
  • ایک غیر جامد ابتدائی بلاک میں (لیکن آپ کو یہ سمجھنے کی ضرورت ہے کہ جب بھی کوئی چیز بنائی جائے گی، جب اس ابتدائی بلاک کو عمل میں لایا جائے گا تو جامد فیلڈ کو اوور رائٹ کردیا جائے گا؛
  • کلاس کنسٹرکٹر میں۔ جب بھی کنسٹرکٹر کو بلایا جائے گا (یعنی جب بھی اس کنسٹرکٹر کا استعمال کرتے ہوئے کوئی چیز بنائی جائے گی)، فیلڈ کو اوور رائٹ کر دیا جائے گا۔
  • جامد طریقوں میں؛
  • غیر جامد طریقوں میں؛
  • گھریلو جامد اور غیر جامد، مقامی اور گمنام کلاسوں میں۔

47. گمنام کلاسز کیا ہیں؟

گمنام کلاسیں ایسی کلاسیں ہیں جن کی اپنی قسم نہیں ہوتی۔ میں کس بارے میں بات کر رہا ہوں؟ جب ہم نے انٹرفیس کے بارے میں بات کی تو میں نے ذکر کیا کہ آپ کسی شے کی مثال نہیں بنا سکتے ہیں: آپ صرف اس کلاس کی مثال بنا سکتے ہیں جو انٹرفیس کو لاگو کرتی ہے۔ کیا ہوگا اگر آپ نہیں چاہتے کہ کوئی کلاس انٹرفیس کو نافذ کرے لیکن کسی ایسی چیز کی ضرورت ہو جو انٹرفیس کو نافذ کرے؟ اور اس چیز کا واحد استعمال ہونے کا امکان ہے۔ اور آپ کو مکمل نفاذ کی کلاس بنانے کی ضرورت نہیں ہے۔ آپ یہ کیسے کریں گے؟ یہ ٹھیک ہے! ایک گمنام کلاس کا استعمال کرکے! جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات اور جوابات تلاش کرنا۔  حصہ 5 - 4فرض کریں کہ ہمارے پاس کچھ اینیمل انٹرفیس ہے:
public final interface Animal {
   public void speak();
}
اگر ہم دیئے گئے انٹرفیس کو تیز کرنے کے لئے ایک گمنام کلاس استعمال کرنا چاہتے ہیں:
Animal cat = new Animal() {
   @Override
   public void speak() {
       System.out.println("Meow! Meow! Meow!");
   }
};
اور پھر، آپ محفوظ طریقے سے اس آبجیکٹ اور اس کے نافذ کردہ اسپیک() طریقہ کو استعمال کر سکتے ہیں۔ دوسرے لفظوں میں، گمنام کلاس انٹرفیس اور اس کے تمام تجریدی طریقوں کو یہاں اور ابھی نافذ کرتی ہے۔ بصورت دیگر، ہم انٹرفیس/ تجریدی کلاس آبجیکٹ بنانے کے قابل نہیں ہوں گے کیونکہ وہاں غیر لاگو/ تجریدی طریقے ہوں گے۔ جیسا کہ میں نے ذکر کیا ہے، گمنام کلاسز کا استعمال نہ صرف انٹرفیس کے تجریدی طریقوں کو نافذ کرنے کے لیے کیا جاتا ہے بلکہ تجریدی کلاس کے تجریدی طریقوں کو نافذ کرنے کے لیے بھی استعمال کیا جاتا ہے۔ یہ نقطہ نظر ان حالات کے لیے اچھا ہے جب کسی چیز کو ایک بار استعمال کیا جاتا ہے یا جب کسی مخصوص طریقہ پر عمل درآمد کی صرف ایک بار ضرورت ہوتی ہے۔ ایک علیحدہ کلاس بنانے کی ضرورت نہیں ہے جو مطلوبہ تجریدی کلاس/انٹرفیس کو نافذ کرے۔ لیکن میں یہ بھی نوٹ کرتا ہوں کہ گمنام کلاسز کام میں شاذ و نادر ہی استعمال ہوتے ہیں۔ ایک اصول کے طور پر، عام کلاسوں کو اب بھی ترجیح دی جاتی ہے۔ آپ اس مضمون میں گمنام کلاسز کے بارے میں مزید پڑھ سکتے ہیں ۔

48. ابتدائی کلاسز کیا ہیں؟

میرے خیال میں یہ ایک گمراہ کن سوال ہے، ممکنہ طور پر ایک چال والا سوال ہے، کیونکہ جاوا میں پرائمیٹو کلاسز جیسی کوئی چیز نہیں ہے۔ صرف قدیم اقسام کا تصور ہے، جس پر ہم نے پہلے غور کیا تھا۔ ہمیں یاد ہے کہ جاوا کی 8 قدیم اقسام ہیں: بائٹ ، شارٹ ، انٹ ، لانگ ، فلوٹ ، ڈبل ، چار ، بولین ۔

49. ریپر کلاس کیا ہے؟

جاوا میں قدیم اقسام کے استعمال میں بنیادی مسئلہ یہ ہے کہ وہ کلاسز نہیں ہیں، اور جاوا ایک OOP زبان ہے۔ یعنی اس زبان میں لکھے گئے پروگرام اشیاء کے درمیان تعامل کے مترادف ہیں۔ لیکن قدیم چیزیں اشیاء نہیں ہیں۔ ان کے پاس طریقے نہیں ہیں، یہاں تک کہ آبجیکٹ کلاس کے معیاری طریقے بھی۔ لیکن کیا ہوگا اگر ہمیں نقشہ میں ایک کلید کے طور پر قدیم کو استعمال کرنے کی ضرورت ہے ؟ پھر ہمیں اس کے ہیش کوڈ () طریقہ کو کال کرنے کی ضرورت ہے۔ آپ وہاں اس کے equals() طریقہ کو بھی کہہ سکتے ہیں ۔ پھر کیا؟ بہت سارے لمحات ہیں جہاں آپ کو کلاس کی ضرورت ہے نہ کہ قدیم۔ یہ ایک پروگرام میں پرائمیٹوز کو ناقابل استعمال اور ناپسندیدہ عناصر بناتا ہے کیونکہ وہ OOP کے تصور کی خلاف ورزی کرتے ہیں۔ لیکن صورت حال اتنی خراب نہیں ہے جتنی نظر آتی ہے۔ بہر حال، جاوا کے پاس قدیم ریپرز کا تصور ہے۔ جاوا میں، ہر قدیم قسم میں جڑواں ہوتا ہے - ایک ریپر کلاس۔
  • بائٹ -> بائٹ کلاس
  • مختصر -> مختصر کلاس
  • int -> Integer.class
  • long -> long.class
  • float -> Float.class
  • ڈبل -> ڈبل کلاس
  • char -> Character.class
  • boolean -> Boolean.class
یہ اقسام سادہ اقسام کی نمائندگی کرتی ہیں، لیکن مختلف اور مددگار طریقوں کے ایک گروپ کے ساتھ مکمل کلاسوں میں۔ آٹو باکسنگ اور ان باکسنگ کے تصورات متعارف کرائے گئے تاکہ ان کلاسوں کو آسانی سے استعمال کیا جا سکے۔ آٹو باکسنگ ایک قدیم قسم کی اس کے مشابہ کلاس میں خودکار تبدیلی ہے، اگر ضروری ہو (مثال کے طور پر، int کو Integer میں تبدیل کرنا )۔ ان باکسنگ مخالف عمل ہے: ایک پرائمیٹو ریپر کلاس کو پرائمیٹو ٹائپ میں خودکار تبدیلی (مثال کے طور پر، Integer کو int میں تبدیل کرنا )۔ پرائمیٹو ریپر کلاسز کے تعارف اور آٹو باکسنگ اور ان باکسنگ کے عمل کی بدولت، قدیم قسمیں اب ایک OOP زبان کے طور پر جاوا کے مکمل ممبر ہیں۔ جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات اور جوابات تلاش کرنا۔  حصہ 5 - 5اس موضوع پر مزید گہرائی سے بحث کے لیے، میں اس مضمون کو پڑھنے کی سختی سے سفارش کرتا ہوں ۔

50. نیسٹڈ کلاس کیا ہے؟ یہ کہاں استعمال ہوتا ہے؟

نیسٹڈ کلاس ایک ایسی کلاس ہوتی ہے جو خود کسی دوسری کلاس کا ممبر ہوتا ہے۔ جاوا میں ان نیسٹڈ کلاسز کی 4 قسمیں ہیں: 1. اندرونی کلاس اس قسم کی کلاس کا اعلان براہ راست کسی اور کلاس کے باڈی میں کیا جاتا ہے۔ ایک اندرونی کلاس ایک غیر جامد نیسٹڈ کلاس ہے اور بیرونی کلاس کے کسی بھی نجی فیلڈ یا مثال کے طریقہ تک رسائی حاصل کر سکتی ہے۔ مثال کے طور پر، آئیے ایک چڑیا گھر بنائیں جس میں ایک جانور ہو — ایک زیبرا:
public class Zoo {
   class Zebra {
       public void eat(String food) {
           System.out.println("Zebra eats " + food);
       }
   }
}
پیچیدہ نہیں، ٹھیک ہے؟ آئیے اندرونی کلاس کی مثال بنانے کی ایک مثال پر ایک نظر ڈالیں:
Zoo.Zebra zebra = new Zoo().new Zebra();
zebra.eat("apple");
جیسا کہ آپ پہلے ہی دیکھ چکے ہیں، سب سے پہلے انکلوژنگ کلاس کا ایک آبجیکٹ بنانا ضروری ہے۔ پھر آپ اندرونی طبقے کی مثال بنانے کے لیے آبجیکٹ کا حوالہ استعمال کرتے ہیں۔ میں یہ بھی بتانا چاہوں گا کہ اندرونی کلاس (غیر جامد نیسٹڈ کلاس) میں جامد طریقے یا جامد فیلڈ نہیں ہوسکتے ہیں۔ یہ خاص طور پر اس وجہ سے ہے کہ اندرونی طبقہ اس کے بیرونی طبقے کی مثال کے ساتھ واضح طور پر منسلک ہے، اور اس وجہ سے اپنے اندر کسی جامد طریقوں کا اعلان نہیں کر سکتا۔ 2. جامد نیسٹڈ کلاسز یہ کلاسز پچھلی کیٹیگری سے ملتی جلتی ہیں، لیکن کلاس ڈیکلریشن میں ان کے پاس سٹیٹک رسائی موڈیفائر ہے۔ چونکہ اس قسم کی کلاس کو بیرونی طبقے کے غیر جامد شعبوں تک رسائی حاصل نہیں ہوتی ہے، اس لیے یہ اندرونی طبقے کے مقابلے بیرونی طبقے کے جامد حصے کی طرح نظر آتی ہے۔ لیکن اس کلاس کو بیرونی طبقے کے تمام جامد ارکان تک رسائی حاصل ہے، یہاں تک کہ نجی تک۔ جامد نیسٹڈ کلاس کی مثال:
public class Zoo {
   static class Zebra {
       public void eat(String food) {
           System.out.println("Zebra eats " + food);
       }
   }
}
یہ پچھلے ایک سے تھوڑا مختلف میں بنایا گیا ہے:
Zoo.Zebra zebra = new Zoo.Zebra();
zebra.eat("apple");
یہاں ہمیں جامد نیسٹڈ کلاس کا آبجیکٹ بنانے کے لیے بیرونی کلاس کی کسی چیز کی ضرورت نہیں ہے۔ ہمیں صرف نیسٹڈ کلاس کا نام جاننے کی ضرورت ہے تاکہ اسے بیرونی کلاس میں تلاش کیا جا سکے۔ 3. لوکل کلاسز لوکل کلاسز وہ کلاسز ہیں جو ایک طریقہ کے باڈی کے اندر اعلان کی جاتی ہیں۔ مقامی کلاس کے آبجیکٹ کو صرف انکلوڈنگ طریقہ میں بنایا اور استعمال کیا جا سکتا ہے۔ مثال:
public class Zoo {
   public void feed(String animal, String food) {
       switch(animal) {
           case "zebra":
               class Zebra {
                   public void eat(String food) {
                       System.out.println("Zebra eats " + food);
                   }
               }
               Zebra zebra = new Zebra();
               zebra.eat(food);
               ...
یہاں ایک مثال ہے:
Zoo zoo = new Zoo();
zoo.feed("zebra", "apple");
اگر آپ نے feed() طریقہ کار کا کوڈ نہیں دیکھا ، تو آپ کو یہ شک بھی نہیں ہوگا کہ مقامی کلاس موجود ہے، کیا آپ کریں گے؟ مقامی کلاس جامد یا عارضی نہیں ہو سکتی، لیکن اسے خلاصہ یا حتمی کے طور پر نشان زد کیا جا سکتا ہے (ایک یا دوسرا، لیکن دونوں نہیں، کیونکہ بیک وقت ان دو ترمیم کاروں کا استعمال ایک تنازعہ پیدا کرتا ہے)۔ 4. گمنام کلاسز ہم نے پہلے ہی اوپر گمنام کلاسز کے بارے میں بات کی ہے، اور جیسا کہ آپ کو یاد ہوگا، انہیں دو ذرائع سے بنایا جا سکتا ہے - انٹرفیس اور کلاسز۔ ان کو استعمال کرنے کی وجوہات نیسٹڈ سٹیٹک اور نان سٹیٹک کلاسز کا استعمال کیا جاتا ہے کیونکہ بعض اوقات چھوٹی کلاسوں کو زیادہ عام کلاسوں میں شامل کرنا اور انہیں ایک ساتھ رکھنا بہتر ہوتا ہے تاکہ ان میں زیادہ ہم آہنگی اور مشترکہ مقصد ہو۔ بنیادی طور پر، نیسٹڈ کلاسز آپ کو اپنے کوڈ کی انکیپسولیشن کو بڑھانے دیتی ہیں۔ اگر کلاس کو صرف ایک طریقہ میں استعمال کیا جاتا ہے تو آپ مقامی کلاس استعمال کرنے کا انتخاب کر سکتے ہیں۔ اس صورت میں، کیا ہمیں درخواست پر کوڈ پھیلانے کی ضرورت ہے؟ نہیں، اس نے کہا، میں یہ اضافہ کروں گا کہ اپنے تجربے میں میں نے کبھی کسی کو مقامی کلاسز استعمال کرتے نہیں دیکھا، کیونکہ ان کی ضرورت ہے یا نہیں، یہ انتہائی متنازعہ ہے۔ آپ گمنام کلاسز کا استعمال کر سکتے ہیں جب کسی انٹرفیس یا تجریدی کلاس کے مخصوص نفاذ کی صرف ایک بار ضرورت ہو۔ اس صورت میں، نفاذ کے ساتھ ایک الگ، مکمل کلاس بنانے کی ضرورت نہیں ہے۔ اس کے بجائے، ہم نے اسے سادہ رکھا اور ایک گمنام کلاس کا استعمال کرتے ہوئے جس طریقہ (طریقے) کی ضرورت ہے اس کو نافذ کیا، آبجیکٹ کا استعمال کیا، اور پھر اس کے بارے میں بھول گئے (یقیناً، کوڑا اٹھانے والا نہیں بھولا)۔ نیسٹڈ کلاسز کے بارے میں آپ کی سمجھ میں یہاں کے مضمون سے اضافہ ہوگا۔

51. ایک کلاس میں کون سے ترمیم کرنے والوں تک رسائی ہو سکتی ہے؟

کلاسز کی مختلف قسمیں ہیں اور ان پر مختلف رسائی میں ترمیم کرنے والے لاگو ہوتے ہیں:
  • ایک بیرونی طبقے میں عوامی رسائی موڈیفائر ہو سکتا ہے یا بالکل بھی کوئی ترمیم کنندہ نہیں ہوسکتا ہے (پہلے سے طے شدہ ترمیم کنندہ)؛
  • ایک اندرونی کلاس (غیر جامد نیسٹڈ کلاس) میں 4 رسائی موڈیفائر میں سے کوئی ایک ہو سکتا ہے۔
  • ایک نیسٹڈ سٹیٹک کلاس میں محفوظ کے علاوہ رسائی میں ترمیم کرنے والوں میں سے کوئی ایک ہو سکتا ہے کیونکہ یہ ترمیم کرنے والا وراثت کا مطلب ہے، جو کلاس کے کسی بھی جامد ممبر سے متصادم ہے (جامد ممبران وراثت میں نہیں ملے ہیں)؛
  • ایک مقامی کلاس میں صرف ڈیفالٹ موڈیفائر ہو سکتا ہے (یعنی کوئی بھی ترمیم کنندہ نہیں)؛
  • ایک گمنام کلاس کا کوئی کلاس ڈیکلریشن نہیں ہوتا ہے، اس لیے اس کے پاس رسائی میں ترمیم کرنے والا بالکل نہیں ہے۔
یہ وہ جگہ ہے جہاں ہم آج کا اختتام کریں گے۔ پھر ملیں گے!جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات اور جوابات تلاش کرنا۔  حصہ 5 - 6
مزید پڑھ:
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION