JavaRush /جاوا بلاگ /Random-UR /سوال و جواب: کیا حتمی کلاس میں تجریدی طریقوں کی وضاحت ممک...

سوال و جواب: کیا حتمی کلاس میں تجریدی طریقوں کی وضاحت ممکن ہے؟

گروپ میں شائع ہوا۔
یہ دلچسپ اور اہم سوال میرے ایک قارئین سے جاوا ڈویلپر کی پوزیشن کے لیے ٹیلی فون انٹرویو کے دوران پوچھا گیا تھا۔ اگرچہ وہ جانتا تھا کہ جاوا زبان میں خلاصہ کلاس بناناfinal ناممکن ہے ، لیکن وہ سوال کے الفاظ سے الجھن میں پڑ گیا۔ جواب آسان ہے: نہیں، finalکلاس میں تجریدی طریقے نہیں ہو سکتے۔ کیوں؟ کیونکہ جیسے ہی آپ جاوا لینگویج کلاس میں تجریدی طریقہ کا اعلان کرتے ہیں، یہ کلاس خود بخود خلاصہ بن جاتی ہے، اور finalآپ جاوا زبان میں تجریدی کلاس نہیں بنا سکتے۔ اس کا مطلب ہے کہ جاوا کلاس میں تجریدی طریقے finalنہیں ہوسکتے ہیں ۔
سوال و جواب: کیا حتمی کلاس میں تجریدی طریقوں کی وضاحت ممکن ہے؟  - 1
بہت سے جاوا ڈویلپرز الفاظ کی وجہ سے اس سوال کا جواب دیتے وقت الجھن میں پڑ جاتے ہیں۔ یہاں تک کہ اگر سوال پوچھنے والا شخص عام تصور سے واقف ہے، تو اسے شاید یہ احساس نہ ہو کہ ایک طبقہ، اس میں تجریدی طریقہ کا اعلان کرنے کے بعد، تجریدی ہو جاتا ہے، اور آپ finalجاوا میں تجریدی کلاس نہیں بنا سکتے۔ یہ نقطہ اس سوال کو عام اور اکثر پوچھے جانے والے سوال سے الگ کرتا ہے: کیا جاوا میں ایک ہی وقت میں کسی کلاس کو خلاصہ اور حتمی قرار دینا ممکن ہے؟ آئیے یہ ظاہر کرنے کے لیے ایک مثال کے کوڈ کو دیکھتے ہیں کہ finalکلاس میں تجریدی طریقہ کا اعلان کرنا ممکن نہیں ہے۔ آئیے Hello.javaہمارے پاس public finalایک کلاس ہے Helloجس کا نام ایک خلاصہ طریقہ ہے print()۔
public final class Hello {
  public abstract void print();
}
اس کوڈ کو IDE میں ٹائپ کریں، آپ کو درج ذیل ایرر میسج ملے گا، ان کا کہنا ہے کہ Helloیہ ایک خلاصہ کلاس ہونا چاہیے تاکہ اس میں تجریدی طریقوں کا اعلان کیا جا سکے۔
سوال و جواب: کیا حتمی کلاس میں تجریدی طریقوں کی وضاحت ممکن ہے؟  - 2
سوال و جواب: کیا حتمی کلاس میں تجریدی طریقوں کی وضاحت ممکن ہے؟  - 3
اگر آپ نوٹ پیڈ میں اس کوڈ کو ٹائپ کریں اور کمانڈ لائن سے javac یوٹیلیٹی کا استعمال کرتے ہوئے اسے مرتب کریں تو بھی یہی ہوگا۔ جاوا کی وضاحتوں کے مطابق، جیسے ہی آپ کلاس کے اندر ایک تجریدی طریقہ کا اعلان کرتے ہیں، وہ کلاس ایک تجریدی کلاس بن جاتی ہے، اور چونکہ آپ finalجاوا میں تجریدی کلاس نہیں بنا سکتے، اس لیے کمپائلر ایک غلطی پیدا کر دے گا۔ یہ جاوا زبان میں اعلیٰ درجے کی کلاسز اور نیسٹڈ کلاسز دونوں کے لیے درست ہے۔ یہاں تک کہ اگر آپ نیسٹڈ کلاس میں ایک تجریدی طریقہ کا اعلان کرتے ہیں final، غلطی ایک جیسی ہوگی۔ ایک اور متعلقہ سوال یہ ہے کہ: کیا جاوا میں تجریدی کلاس میں جامد طریقے ہوسکتے ہیں؟ جواب: ہاں، وہ کر سکتے ہیں، تجریدی کلاس میں جامد طریقہ کا اعلان کرنے میں کوئی حرج نہیں ہے، کیونکہ جامد طریقہ استعمال کرنے کے لیے آپ کو کلاس کی مثال بنانے کی ضرورت نہیں ہے، انہیں صرف کلاس کا نام استعمال کرتے ہوئے کہا جا سکتا ہے۔ ہم کلاس میں Helloایک طریقہ شامل کرنے کے لیے اپنی مثال میں ترمیم کر سکتے ہیں main()، جو جاوا میں جامد ہے، جیسا کہ ذیل میں دکھایا گیا ہے:
public abstract class Hello {
  public abstract void print();
  public static void main(String args[]) {
     // Howой-то code
  }
}
جیسا کہ آپ دیکھ سکتے ہیں، کوئی تالیف کی غلطی نہیں پھینکی گئی ہے۔ یہ کوڈ بغیر کسی پریشانی کے مرتب کرتا ہے، کیونکہ جاوا میں آپ خلاصہ کلاس میں مکمل طور پر ایک جامد طریقہ کا اعلان کر سکتے ہیں۔ مختصر نتیجہfinal ایک کلاس میں تجریدی طریقہ کا اعلان کرنا ناممکن ہے۔ کیونکہ ایک بار جب آپ یہ کر لیتے ہیں تو جاوا کی وضاحتوں کے مطابق کلاس خود بخود خلاصہ بن جاتی ہے۔ اور چونکہ finalجاوا میں ایک کلاس خلاصہ نہیں ہوسکتی ہے، یہ ناقابل قبول ہے، اور کمپائلر آپ کو غلطی پھینک کر ایسا کرنے سے منع کرے گا۔ لیکن آپ جامد طریقوں کا اعلان حتمی اور تجریدی کلاسوں میں کر سکتے ہیں، اس میں کوئی مسئلہ نہیں ہے۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION