هي دلچسپ ۽ اهم سوال منهنجي پڙهندڙن مان هڪ کان پڇيو ويو هڪ ٽيليفون انٽرويو دوران جاوا ڊولپر پوزيشن لاءِ. جيتوڻيڪ هن کي خبر هئي ته جاوا ٻوليءَ ۾ تجريدي طبقو ٺاهڻ
ڪيترائي جاوا ڊولپر پريشان ٿي ويندا آهن جڏهن هن سوال جو جواب ڏيندي لفظن جي ڪري. ايستائين جو سوال پڇڻ وارو شخص عام تصور کان واقف آهي، هن کي شايد اهو احساس نه هجي ته هڪ طبقو، ان ۾ هڪ تجريدي طريقو بيان ڪرڻ کان پوء، خلاصو بڻجي ويندو آهي، ۽ توهان
ساڳيو ڪم تڏهن ٿيندو جڏهن توهان هن ڪوڊ کي نوٽ پيڊ ۾ ٽائيپ ڪريو ۽ ان کي ڪمانڊ لائن مان javac يوٽيلٽي استعمال ڪندي گڏ ڪيو. جاوا جي وضاحتن جي مطابق، جيئن ئي توهان ڪنهن ڪلاس جي اندر خلاصي طريقي جو اعلان ڪندا آهيو، اهو ڪلاس هڪ خلاصو ڪلاس بڻجي ويندو آهي، ۽ جيئن ته توهان
final
ناممڪن آهي ، پر هو سوال جي لفظن ۾ مونجهاري ۾ پئجي ويو. جواب سادو آهي: نه، final
هڪ ڪلاس ۾ تجريدي طريقا نٿا ٿي سگهن. ڇو؟ ڇاڪاڻ ته جيئن ئي توهان جاوا ٻوليءَ جي ڪلاس ۾ هڪ خلاصي طريقي جو اعلان ڪيو، اهو طبقو خود بخود خلاصو ٿي ويندو، ۽ final
توهان جاوا ٻوليءَ ۾ خلاصو ڪلاس نٿا ٺاهي سگهو. هن جو مطلب آهي ته جاوا-ڪلاس ۾ تجريدي طريقا final
نٿا ٿي سگهن .
final
جاوا ۾ تجريدي طبقي کي نٿا ٺاهي سگهو. هي نقطو هن سوال کي وڌيڪ عام ۽ اڪثر پڇيا ويندڙ سوال کان الڳ ڪري ٿو: ڇا جاوا ۾ ممڪن آهي ته ڪنهن طبقي کي هڪ ئي وقت خلاصي ۽ حتمي قرار ڏنو وڃي؟ اچو ته هڪ مثالي ڪوڊ کي ڏسو ته اهو ظاهر ڪرڻ لاءِ ته final
اهو ممڪن ناهي ته هڪ خلاصي طريقي جو اعلان -ڪلاس ۾. اچو ته Hello.java
اسان کي public final
هڪ ڪلاس سڏيو وڃي Hello
، جنهن ۾ هڪ خلاصو طريقو آهي print()
.
public final class Hello {
public abstract void print();
}
ھن ڪوڊ کي IDE ۾ ٽائيپ ڪريو، توھان کي ھيٺ ڏنل ايرر ميسيج ملندو، اھي چون ٿا ته Hello
اھو ھڪڙو خلاصو طبقو ھوندو ته جيئن ان ۾ تجريدي طريقا بيان ڪري سگھجن.
final
جاوا ۾ هڪ خلاصو ڪلاس نه ٿا ڪري سگهو، مرتب ڪندڙ هڪ غلطي پيدا ڪندو. اهو صحيح آهي ٻنهي اعليٰ سطحي طبقن ۽ جاوا ٻوليءَ ۾ نيسٽ ٿيل طبقن لاءِ. ايستائين جو جيڪڏهن توهان هڪ خلاصي طريقي جو اعلان ڪيو هڪ nested final
-class ۾، غلطي ساڳي هوندي. هڪ ٻيو لاڳاپيل سوال آهي: ڇا جاوا ۾ هڪ تجريدي طبقي ۾ جامد طريقا هوندا؟ جواب: ها، اهي ڪري سگهن ٿا، خلاصي ڪلاس ۾ جامد طريقو بيان ڪرڻ ۾ ڪو مسئلو ناهي، ڇاڪاڻ ته جامد طريقو استعمال ڪرڻ لاءِ توهان کي ڪلاس جو مثال ٺاهڻ جي ضرورت ناهي، انهن کي صرف طبقي جو نالو استعمال ڪندي سڏي سگهجي ٿو. اسان پنھنجي مثال کي ڪلاس ۾ Hello
ھڪڙو طريقو شامل ڪرڻ لاء تبديل ڪري سگھون ٿا main()
، جيڪو جاوا ۾ جامد آھي، جيئن ھيٺ ڏيکاريل آھي:
public abstract class Hello {
public abstract void print();
public static void main(String args[]) {
// Howой-то code
}
}
جئين توهان ڏسي سگهو ٿا، ڪا به تاليف جي غلطي نه اڇلائي وئي آهي. هي ڪوڊ بغير ڪنهن مسئلن جي گڏ ڪري ٿو، ڇاڪاڻ ته جاوا ۾ توهان مڪمل طور تي محفوظ طريقي سان هڪ خلاصي طبقي ۾ جامد طريقو بيان ڪري سگهو ٿا. مختصر نتيجو اهو ناممڪن آهي ته هڪ تجريدي طريقي جو اعلان -ڪلاس ۾ final
. ڇو ته هڪ دفعو توهان اهو ڪندا آهيو، جاوا جي وضاحتن جي مطابق، ڪلاس خودڪار طور تي خلاصو بڻجي ويندو آهي. ۽ جيئن ته final
جاوا ۾ هڪ -ڪلاس خلاصو نٿو ٿي سگهي، اهو ناقابل قبول آهي، ۽ مرتب ڪندڙ توهان کي اهو ڪرڻ کان منع ڪندو هڪ غلطي اڇلائي. پر توهان جامد طريقن جو اعلان ڪري سگهو ٿا ٻنهي حتمي ۽ تجريدي طبقن ۾، هن سان ڪو مسئلو ناهي.
GO TO FULL VERSION