JavaRush /جاوا بلاگ /Random-UR /جاوا ڈویلپر کے انٹرویوز سے سوالات اور جوابات کا تجزیہ۔ حص...

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

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

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

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

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

ایک بہت ہی عجیب فارمولیشن - "متغیر طریقے"۔ یقیناً اس سے مراد عام، غیر جامد طریقے ہیں۔ لہذا، بنیادی فرق یہ ہے کہ جامد طریقے کلاس سے تعلق رکھتے ہیں اور درحقیقت ان کے لیے آپ کو اس کلاس کی مثال بنانے کی ضرورت نہیں ہے: اسے صرف کلاس ٹائپ کا استعمال کرتے ہوئے کہا جا سکتا ہے۔ مثال کے طور پر، ہمارے پاس بلی کو پالنے کا ایک مستحکم طریقہ ہے:
public class CatService {
   public static void petTheCat(Cat cat) {
       System.out.println("Погладить кота - " + cat.getName());
   }
ہمیں اسے کال کرنے کے لیے CatService کلاس کی مثال کی ضرورت نہیں ہے :
Cat cat = new Cat(7, "Bobi");
CatService.petTheCat(cat);
جب کہ عام طریقے کسی شے کے پابند ہوتے ہیں، اور انہیں کال کرنے کے لیے، آپ کے پاس ایک مثال (آبجیکٹ) ہونا ضروری ہے جس پر طریقہ کہا جائے گا۔ مثال کے طور پر، ایک بلی کا ایک غیر جامد طریقہ ہے - meowing:
class Cat {
   public void mew() {
       System.out.println("Meow! Meow! Meow!");
   }
اس طریقہ کو کال کرنے کے لیے، ہمیں بلی کی ایک مخصوص مثال کی ضرورت ہے:
Cat cat = new Cat(7, "Bobi");
cat.mew();

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

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

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

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

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

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

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

جامد طریقوں کو باقاعدہ طریقوں میں استعمال کیا جا سکتا ہے، کیونکہ کوئی بھی چیز اس سے نہیں روکتی۔ ایک ہی وقت میں، معکوس صورت حال ناممکن ہے: ایک جامد طریقہ اس طبقے کی مخصوص مثال کے حوالے کے بغیر باقاعدہ طریقہ استعمال نہیں کر سکتا۔ اور جیسا کہ ہمیں یاد ہے، یہ حوالہ جامد کلاس کے ممبروں کے لیے دستیاب نہیں ہے: کلاس کی جتنی مخصوص چیزیں آپ چاہیں ہو سکتی ہیں، اور ان میں سے ہر ایک کے اندر اپنے آپ کا ایک حوالہ ہوگا ۔ اور پھر آپ کیسے سمجھیں گے کہ آپ کو کون سا خاص لنک لینے کی ضرورت ہے؟ لیکن کوئی راستہ نہیں۔ لہذا، جامد عناصر کسی مخصوص شے کے حوالے کے بغیر، غیر جامد عناصر کا حوالہ نہیں دے سکتے۔ دراصل، ایک جامد طریقہ غیر جامد طریقہ استعمال کر سکتا ہے جب اس میں کسی خاص چیز کا حوالہ ہو۔ مثال کے طور پر، ایک جو دلیل کے طور پر آیا ہے:
public static void petTheCat(Cat cat) {
   System.out.println("Погладить кота - " + cat.getName());
}
یہاں ہم دیکھتے ہیں کہ جامد طریقہ petTheCat Cat آبجیکٹ کے نارمل، غیر جامد طریقہ کو کہتے ہیں - getName ۔

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

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

   @Override
   public void voice() {
       System.out.println("Meow! Meow! Meow!");
   }
}
انٹرفیس استعمال کرنے کے بارے میں آپ کو جاننے کی اہم چیز یہ ہے:
  1. انٹرفیس کے طریقوں میں صرف ایک ہیڈر ہونا چاہیے، بغیر کسی مخصوص طریقہ کار کے، یعنی خلاصہ ہونا چاہیے (لیکن خلاصہ کلیدی لفظ استعمال کیے بغیر )۔ اس میں مستثنیٰ جامد اور طے شدہ طریقے ہیں، جن کے لیے میتھڈ باڈی کی ضرورت ہوتی ہے۔
  2. ایک کلاس بہت سے انٹرفیس کو نافذ کر سکتی ہے (جیسا کہ میں نے کہا، یہ ایک سے زیادہ وراثت کا متبادل ہے)، جو کوما سے الگ کرکے لکھا جاتا ہے: class Lion کو Animal، Wild کو نافذ کرتا ہے ۔
  3. انٹرفیس کلیدی لفظ - انٹرفیس کا استعمال کرتے ہوئے بنائے جاتے ہیں ۔
  4. کلاس کے ذریعہ انٹرفیس کو لاگو کرتے وقت، کلیدی لفظ امپلیز ہوتا ہے ۔
  5. ایک کلاس جو کسی خاص انٹرفیس کو لاگو کرتی ہے اسے اپنے تمام تجریدی طریقوں کو نافذ کرنا چاہیے، یا خود کو خلاصہ قرار دینا چاہیے۔
  6. انٹرفیس استعمال کرنے کا بنیادی مقصد پولیمورفزم (اشیا کی کئی شکلیں لینے کی صلاحیت) کو نافذ کرنا ہے۔
  7. ایک اصول کے طور پر، طریقوں کے لیے رسائی میں ترمیم کرنے والے انٹرفیس میں نہیں لکھے جاتے ہیں: وہ بطور ڈیفالٹ عوامی ہوتے ہیں، اور عوام کے علاوہ دیگر ترمیم کاروں کی وضاحت نہیں کی جا سکتی۔ جاوا 9 کے بعد سے، آپ طریقوں کے لیے پرائیویٹ موڈیفائر استعمال کر سکتے ہیں۔
  8. انٹرفیس متغیرات بطور ڈیفالٹ جامد حتمی ہوتے ہیں ، دوسرے الفاظ میں، مستقل: انہیں ہمیشہ انٹرفیس میں براہ راست شروع کرنے کی ضرورت ہوتی ہے۔
  9. آپ انٹرفیس آبجیکٹ نہیں بنا سکتے۔
اس سوال کا جواب کہ کیا انٹرفیس حتمی ہوسکتے ہیں یقیناً نہیں۔ سب کے بعد، انٹرفیس کے بہت جوہر کو لاگو کرنا ہے. اور جیسا کہ ہم سب کو اچھی طرح یاد ہے، کلاس کی سطح پر فائنل اسے غیر وراثتی بناتا ہے، اور انٹرفیس کی صورت میں، ناقابل عمل۔ ہمیں ایک ایسے انٹرفیس کی ضرورت کیوں ہے جو لاگو اور استعمال نہ ہو سکے؟ یہ ٹھیک ہے - کوئی ضرورت نہیں ہے! اور مرتب کرنے والا ایسا سوچتا ہے)) جاوا ڈویلپر کے انٹرویوز سے سوالات اور جوابات کا تجزیہ۔  حصہ 5 - 4معنی صرف جاوا 8 کے ساتھ انٹرفیس میں جامد طریقوں کے تعارف کے ساتھ ظاہر ہوا، لیکن اس سے یہ حقیقت تبدیل نہیں ہوئی کہ انٹرفیس حتمی نہیں ہو سکتا۔ میں نے انٹرفیس کے بارے میں بات کی، بہت سطحی، کیونکہ... یہ ایک وسیع موضوع ہے. جاوا میں انٹرفیس اور تجریدی کلاسز اور انٹرفیس کے درمیان فرق کے بارے میں مضامین میں اس کے بارے میں مزید پڑھیں ۔

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

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

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

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

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

جہاں تک میرے لیے، یہ ایک بہت ہی عجیب سوال ہے اور، شاید، یہ ایک ٹریپ سوال ہے، کیونکہ جاوا میں پرائمٹیو کلاسز جیسی کوئی چیز نہیں ہے: سوائے پرائمیٹو اقسام کے تصور کے، جس پر ہم پہلے ہی غور کر چکے ہیں۔ جیسا کہ ہمیں یاد ہے، جاوا میں 8 قدیم قسمیں ہیں - بائٹ ، مختصر ، int ، long ، float ، double ، char ، boolean ۔جاوا ڈویلپر کے انٹرویوز سے سوالات اور جوابات کا تجزیہ۔  حصہ 5 - 6

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

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

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

نیسٹڈ کلاس ایک اندرونی کلاس ہے جو کسی اور کلاس کا ممبر ہے۔ جاوا میں، اس طرح کی داخلی کلاسوں کی 4 قسمیں ہیں: 1. اندرونی کلاس اس قسم کی کلاس کو براہ راست کسی دوسری کلاس کے باڈی میں قرار دیا جاتا ہے۔ نیسٹڈ اندرونی کلاس کسی بھی نجی فیلڈ یا بیرونی طبقے کی مثال کے طریقہ تک رسائی حاصل کر سکتی ہے۔ مثال کے طور پر، آئیے ایک چڑیا گھر بنائیں جس میں ہمارے پاس ایک جانور ہوگا - ایک زیبرا:
public class Zoo {
   class Zebra {
       public void toFeed(String food) {
           System.out.println("Дать зебре - " + food);
       }
   }
}
کچھ بھی پیچیدہ نہیں، ٹھیک ہے؟ آئیے ایک اندرونی کلاس آبجیکٹ بنانے کی ایک مثال پر نظر ڈالیں:
Zoo.Zebra zebra = new Zoo().new Zebra();
zebra.toFeed("яблоко");
جیسا کہ آپ پہلے ہی دیکھ چکے ہیں، فریمنگ کلاس کا ایک آبجیکٹ بنانا ضروری ہے، جس کے حوالہ کی بنیاد پر آپ اندرونی کلاس کا ایک آبجیکٹ بنا سکتے ہیں۔ میں یہ بھی نوٹ کرنا چاہوں گا کہ نیسٹڈ اندرونی کلاس میں جامد طریقے یا جامد فیلڈ نہیں ہوسکتے ہیں۔ اس کی وجہ یہ ہے کہ ایک اندرونی طبقہ اپنے بیرونی طبقے کی چیز کے ساتھ واضح طور پر منسلک ہوتا ہے اور وہ اپنے اندر کسی جامد طریقوں کا اعلان نہیں کر سکتا۔ 2. جامد نیسٹڈ کلاسز یہ کلاس پچھلی کلاس سے ملتی جلتی ہے، صرف اس میں کلاس ڈیکلریشن کے قریب ایک سٹیٹک رسائی موڈیفائر ہے۔ چونکہ اس قسم کی کلاس کو بیرونی طبقے کے غیر جامد شعبوں تک رسائی حاصل نہیں ہوتی ہے، اس لیے یہ اندرونی طبقے کے مقابلے بیرونی طبقے کے جامد حصے کی طرح ہے۔ اس صورت میں، کلاس ڈیٹا کو بیرونی طبقے کے تمام جامد اراکین تک رسائی حاصل ہوتی ہے، یہاں تک کہ نجی تک۔ جامد نیسٹڈ کلاس کی مثال:
public class Zoo {
   static class Zebra {
       public void toFeed(String food) {
           System.out.println("Дать зебре - " + food);
       }
   }
}
تخلیق کا طریقہ پچھلے سے تھوڑا مختلف ہے:
Zoo.Zebra zebra = new Zoo.Zebra();
zebra.toFeed("яблоко");
یہاں ہمیں نیسٹڈ سٹیٹک کلاس کا آبجیکٹ بنانے کے لیے کسی آؤٹر کلاس کی کسی چیز کی ضرورت نہیں ہے۔ بیرونی طبقے سے، ہمیں صرف اس کی قسم کی ضرورت ہے تاکہ ہم نیسٹڈ کلاس کا مقام تلاش کر سکیں۔ 3. لوکل کلاسز لوکل کلاسز وہ کلاسز ہیں جو ایک طریقہ کے باڈی کے اندر ظاہر کی جاتی ہیں، اور مقامی کلاس کی کسی چیز کی تخلیق اور استعمال خصوصی طور پر اس طریقہ کے اندر ممکن ہے۔ مثال:
public class Zoo {
   public void toFeed(String animal, String food) {
       switch(animal){
           case "зебра":
               class Zebra {
                   void toFeedZebra(String food) {
                       System.out.println("Дать зебре - " + food);
                   }
               }
               Zebra zebra = new Zebra();
               zebra.toFeedZebra(food);
               ...
استعمال کی مثال:
Zoo zoo = new Zoo();
zoo.toFeed("зебра", "яблоко");
toFeed طریقہ کے کوڈ کو دیکھے بغیر ، آپ کو مقامی طبقے کے وجود پر بھی شبہ نہیں ہوگا، کیا آپ؟ مقامی کلاس جامد یا عارضی نہیں ہو سکتی ، لیکن اسے خلاصہ یا حتمی کے طور پر نشان زد کیا جا سکتا ہے (صرف OR، کیونکہ ان دو ترمیم کاروں کو استعمال کرنے سے تنازع پیدا ہو جائے گا)۔ 4. گمنام کلاسز ہم پہلے ہی اوپر گمنام کلاسز کے بارے میں بات کر چکے ہیں، اور جیسا کہ آپ کو یاد ہے، انہیں دو ذرائع سے بنایا جا سکتا ہے - انٹرفیس اور کلاسز۔ اندرونی جامد اور غیر جامد کلاسوں کو استعمال کرنے کی وجوہات استعمال کی جاتی ہیں کیونکہ بعض اوقات چھوٹی کلاسوں کو بڑی کلاسوں میں شامل کرنا اور انہیں ایک ساتھ رکھنا بہتر ہوتا ہے: اس طرح ان میں اعلی ہم آہنگی اور ایک مشترکہ مقصد ہوگا۔ دراصل، نیسٹڈ کلاسز کے استعمال سے کوڈ انکیپسولیشن میں اضافہ ہوتا ہے۔ مقامی کلاسز کو منتخب کرنے کی وجہ یہ ہو سکتی ہے کہ دی گئی کلاس کو صرف ایک طریقہ میں استعمال کیا جاتا ہے۔ اس صورت میں، کیا کوڈ کو پوری درخواست میں پھیلانا ضروری ہے؟ نہیں. لیکن ساتھ ہی میں یہ بھی شامل کروں گا کہ میں نے اپنی پریکٹس میں کبھی بھی لوکل کلاسز کا استعمال نہیں دیکھا، کیونکہ ان کی ضرورت انتہائی متنازعہ ہے۔ ٹھیک ہے، گمنام کلاسز کے استعمال کی وجہ یہ ہو سکتی ہے کہ کسی انٹرفیس یا خلاصہ کلاس کے مخصوص نفاذ کی ضرورت صرف ایک بار ہو گی، اس لیے اس کے لیے نفاذ کے ساتھ ایک الگ، مکمل کلاس بنانے کی ضرورت نہیں ہے۔ اس کے بجائے، ایک آسان طریقے سے، ہم نے ایک گمنام کلاس کے ذریعے مطلوبہ طریقہ (طریقے) کو نافذ کیا، اس چیز کو استعمال کیا اور اس کے بارے میں بھول گئے (اچھی طرح سے، کوڑا اٹھانے والے کو اس کے بارے میں یاد تھا)۔ یہ اور یہجاوا ڈویلپر کے انٹرویوز سے سوالات اور جوابات کا تجزیہ۔  حصہ 5 - 8 مضمون آپ کو اندرونی کلاسوں کا مزید تفصیل سے مطالعہ کرنے میں مدد کرے گا ۔

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

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