JavaRush /جاوا بلاگ /Random-UR /10 خلاصہ کلاسز اور انٹرفیس جاوا انٹرویو کے سوالات

10 خلاصہ کلاسز اور انٹرفیس جاوا انٹرویو کے سوالات

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

1. کیا جاوا میں تجریدی کلاس کے کنسٹرکٹرز ہوسکتے ہیں؟

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

2. کیا جاوا میں خلاصہ کلاسیں انٹرفیس کو لاگو کر سکتی ہیں؟ کیا انہیں تمام طریقوں کو نافذ کرنا ہوگا؟

ہاں، تجریدی کلاسز کا استعمال کرتے ہوئے انٹرفیس کو نافذ کر سکتی ہیں implements۔ چونکہ وہ تجریدی ہیں، ان کو تمام طریقوں پر عمل درآمد کرنے کی ضرورت نہیں ہے۔ قسم کا اعلان کرنے کے لیے ایک خلاصہ بیس کلاس اور انٹرفیس کا ہونا ایک تجویز کردہ عمل ہے۔ ایک مثال انٹرفیس java.util.Listاور متعلقہ خلاصہ کلاس ہے java.util.AbstractList۔ چونکہ AbstractListیہ تمام عام طریقوں کو لاگو کرتا ہے، مخصوص نفاذ (جیسے LinkedListاور ArrayList) کو تمام طریقوں کو نافذ کرنے کی ضرورت نہیں ہے، جیسا کہ اگر وہ Listبراہ راست انٹرفیس کو لاگو کرتے ہیں۔ یہ حل تمام عام رویے کو ایک جگہ پر لاگو کرنے کے لیے تجریدی کلاس کی لچک کے ساتھ ایک قسم کا اعلان کرنے کے لیے انٹرفیس استعمال کرنے کے فائدے کو یکجا کرتا ہے۔ جوشوا بلوچ کی کتاب "جاوا میں۔ Effective Programming” میں جاوا میں انٹرفیس اور خلاصہ کلاسز کے استعمال کے موضوع پر ایک بہترین باب ہے، بہتر تفہیم کے لیے اس کا مطالعہ کرنا سمجھ میں آتا ہے۔

3. کیا خلاصہ کلاس فائنل ہو سکتی ہے؟

نہیں، وہ نہیں کرسکتا. کلیدی لفظ finalکا مطلب ہے کہ کلاس درجہ بندی میں سب سے اوپر ہے اور اس کی اولاد نہیں ہو سکتی۔ اور وارث کے بغیر ایک تجریدی طبقہ خلا میں ایک کروی گھوڑا ہے، کیونکہ اس کی مثال بنانا ناممکن ہے abstract class۔ اس طرح، اگر ایک طبقہ abstractاور دونوں ہے final، تو اس کی کوئی اولاد نہیں ہے اور اسے فوری نہیں کیا جا سکتا۔ جاوا کمپائلر ایک غلطی پھینک دے گا اگر آپ کلاس بناتے ہیں abstractاور final.

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

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

5. کیا تجریدی کلاس کو شروع کرنا ممکن ہے؟

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

6. کیا تجریدی کلاس کے لیے تجریدی طریقوں کا ہونا ضروری ہے؟

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

7. جاوا میں تجریدی کلاس اور انٹرفیس کے درمیان کیا فرق ہے؟

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

  • ایک تجریدی طبقے کو وراثت میں ملا ہے (توسیع کرتا ہے)، اور ایک انٹرفیس لاگو ہوتا ہے (عمل درآمد کرتا ہے)۔ ہم صرف ایک طبقے کو وراثت میں لے سکتے ہیں، لیکن جتنے چاہیں انٹرفیس لاگو کر سکتے ہیں۔ ایک انٹرفیس دوسرے انٹرفیس/انٹرفیس کو بڑھا سکتا ہے۔

  • خلاصہ کلاسز کا استعمال اس وقت کیا جاتا ہے جب کوئی "is-a" رشتہ ہوتا ہے، یعنی ذیلی کلاس بنیادی خلاصہ کلاس کو بڑھاتا ہے، اور انٹرفیس کو مختلف کلاسوں کے ذریعے لاگو کیا جا سکتا ہے جو ایک دوسرے سے بالکل متعلق نہیں ہیں۔

8. انٹرفیس پر تجریدی کلاس کو ترجیح دینا اور اس کے برعکس کب سمجھ میں آتا ہے؟

یہ خلاصہ کلاسز اور انٹرفیس پر پچھلے سوالات کا تسلسل ہے۔ اگر آپ جانتے ہیں کہ ان کے نحوی اختلافات کیا ہیں، تو اس سوال کا جواب دینے سے آپ کو کوئی پریشانی نہیں ہوگی، کیونکہ وہ فیصلہ کرنے کا فیصلہ کن عنصر ہیں۔ چونکہ شائع شدہ انٹرفیس میں نیا طریقہ شامل کرنا تقریباً ناممکن ہے، اس لیے مزید ترقی کی ممکنہ ضرورت کی صورت میں تجریدی کلاس کا استعمال کرنا بہتر ہے۔ جاوا میں تجریدی کلاسیں تیار کرنا انٹرفیس تیار کرنے سے زیادہ آسان ہے۔ اسی طرح، اگر ایک انٹرفیس میں بہت سارے طریقے ہیں اور ان سب کو لاگو کرنا ایک حقیقی درد سر بن جاتا ہے، تو بہتر ہے کہ پہلے سے طے شدہ نفاذ کے لیے ایک خلاصہ کلاس بنائیں۔ جاوا کلیکشن پیکج میں اس پیٹرن کی پیروی کی جاتی ہے، خلاصہ کلاس AbstractListکے لیے پہلے سے طے شدہ نفاذ فراہم کرتا ہے List۔ خلاصہ کلاسوں کا استعمال کریں اگر:
  • آپ کوڈ کو کئی قریبی متعلقہ کلاسوں کے درمیان بانٹنا چاہتے ہیں۔

  • آپ ان کلاسوں کی توقع کریں گے جو آپ کی تجریدی کلاس کو بڑھاتے ہیں بہت سے طریقے یا فیلڈ مشترک ہوں گے، یا public(مثال کے طور پر، protectedاور private) کے علاوہ رسائی میں ترمیم کرنے والوں کی ضرورت ہوگی۔

  • آپ غیر جامد یا не-finalفیلڈز کا اعلان کرنا چاہتے ہیں۔ یہ آپ کو ایسے طریقوں کی وضاحت کرنے کی اجازت دیتا ہے جو اس چیز کی حالت تک رسائی اور تبدیل کر سکتے ہیں جس سے وہ تعلق رکھتے ہیں۔
انٹرفیس استعمال کریں اگر:
  • آپ غیر متعلقہ کلاسوں سے آپ کے انٹرفیس کو نافذ کرنے کی توقع کرتے ہیں۔ مثال کے طور پر، انٹرفیس Comparableاور Cloneableبہت سی غیر متعلقہ کلاسوں کے ذریعے لاگو کیا جاتا ہے۔

  • آپ کسی خاص ڈیٹا کی قسم کے رویے کی وضاحت کرنا چاہتے ہیں، لیکن آپ کو اس کی پرواہ نہیں ہے کہ اسے کون نافذ کرتا ہے۔

  • آپ متعدد قسم کی وراثت استعمال کرنا چاہتے ہیں۔

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

ایک تجریدی طریقہ ایک ایسا طریقہ ہے جس کا جسم نہیں ہے۔ آپ طریقہ کے اعلان میں کلیدی لفظ کا استعمال کرتے ہوئے اس کی وضاحت کیے بغیر صرف abstractطریقہ کا اعلان کرتے ہیں۔ جاوا زبان میں انٹرفیس کے اندر اعلان کردہ تمام طریقے بطور ڈیفالٹ خلاصہ ہیں۔ یہاں جاوا میں تجریدی طریقہ کی ایک مثال ہے:
public void abstract printVersion();
اب، اس طریقہ کو نافذ کرنے کے لیے، آپ کو خلاصہ کلاس کو بڑھانا اور اس طریقہ کو اوور رائڈ کرنا ہوگا۔

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

جی ہاں، جاوا میں ایک تجریدی کلاس میں ایک طریقہ ہوسکتا ہے main، کیونکہ یہ صرف ایک اور جامد طریقہ ہے، اور ایک تجریدی کلاس کو طریقہ استعمال کرتے ہوئے عمل میں لایا جاسکتا ہے main، جب تک کہ آپ اسے فوری نہیں کرتے۔ بس اتنا ہی میں آپ کو بتانا چاہتا تھا۔ اور یاد رکھیں: تجریدی کلاسز اور انٹرفیس آبجیکٹ پر مبنی تجزیہ اور ڈیزائن کے عمل میں کلیدی ڈیزائن کے فیصلے ہیں، اور اگر آپ ایک لچکدار نظام بنانا چاہتے ہیں، تو انہیں احتیاط کے ساتھ استعمال کیا جانا چاہیے۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION