JavaRush /جاوا بلاگ /Random-SD /سوال ۽ جواب: ڇا حتمي ڪلاس ۾ تجريدي طريقن جي وضاحت ڪرڻ ممڪ...

سوال ۽ جواب: ڇا حتمي ڪلاس ۾ تجريدي طريقن جي وضاحت ڪرڻ ممڪن آهي؟

گروپ ۾ شايع ٿيل
هي دلچسپ ۽ اهم سوال منهنجي پڙهندڙن مان هڪ کان پڇيو ويو هڪ ٽيليفون انٽرويو دوران جاوا ڊولپر پوزيشن لاءِ. جيتوڻيڪ هن کي خبر هئي ته جاوا ٻوليءَ ۾ تجريدي طبقو ٺاهڻ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جاوا ۾ هڪ خلاصو ڪلاس نه ٿا ڪري سگهو، مرتب ڪندڙ هڪ غلطي پيدا ڪندو. اهو صحيح آهي ٻنهي اعليٰ سطحي طبقن ۽ جاوا ٻوليءَ ۾ نيسٽ ٿيل طبقن لاءِ. ايستائين جو جيڪڏهن توهان هڪ خلاصي طريقي جو اعلان ڪيو هڪ nested final-class ۾، غلطي ساڳي هوندي. هڪ ٻيو لاڳاپيل سوال آهي: ڇا جاوا ۾ هڪ تجريدي طبقي ۾ جامد طريقا هوندا؟ جواب: ها، اهي ڪري سگهن ٿا، خلاصي ڪلاس ۾ جامد طريقو بيان ڪرڻ ۾ ڪو مسئلو ناهي، ڇاڪاڻ ته جامد طريقو استعمال ڪرڻ لاءِ توهان کي ڪلاس جو مثال ٺاهڻ جي ضرورت ناهي، انهن کي صرف طبقي جو نالو استعمال ڪندي سڏي سگهجي ٿو. اسان پنھنجي مثال کي ڪلاس ۾ 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