CodeGym /جاوا بلاگ /Random-SD /جامد نسٽڊ ڪلاس
John Squirrels
سطح
San Francisco

جامد نسٽڊ ڪلاس

گروپ ۾ شايع ٿيل
سلام اسان جاوا ۾ nested طبقن جي موضوع کي ڳولڻ جاري رکون ٿا. آخري مشق ۾، اسان غير جامد نسٽڊ طبقن جي باري ۾ ڳالهايو، جن کي اندروني طبقن جي نالي سان پڻ سڃاتو وڃي ٿو، جامد نسٽڊ ڪلاس - 1اڄ اسان ڪلاس جي هڪ ٻئي گروپ ڏانهن وڃو. اسان static nested classes تي غور ڪنداسين. جامد نسٽڊ ڪلاس - 3اهي ٻين طبقن کان ڪيئن مختلف آهن؟ جڏهن هن قسم جي طبقي جو اعلان ڪريون ٿا، اسان جامد لفظ استعمال ڪندا آهيون، جنهن سان توهان اڳ ۾ ئي واقف آهيو:
public class Boeing737 {

   private int manufactureYear;
   private static int maxPassengersCount = 300;

   public Boeing737(int manufactureYear) {
       this.manufactureYear = manufactureYear;
   }

   public int getManufactureYear() {
       return manufactureYear;
   }

   public static class Drawing {

       public static int getMaxPassengersCount() {

           return maxPassengersCount;
       }
   }
}
جامد نسٽڊ ڪلاس - 4هن مثال ۾، اسان وٽ Boeing737ٻاهرئين طبقو آهي، جيڪو هن قسم جي هوائي جهاز جي نمائندگي ڪري ٿو. ان ۾ ھڪڙو ٺاھيندڙ آھي ھڪڙو پيٽرولر سان: ٺاھڻ جو سال ( int manufactureYear). اتي پڻ ھڪڙو جامد متغير آھي: مسافرن جو وڌ ۾ وڌ تعداد ( int maxPassengersCount). ساڳئي نموني جي سڀني جهازن لاء اهو ساڳيو قدر هوندو، تنهنڪري اسان کي صرف هڪ مثال جي ضرورت آهي. اضافي طور تي، ان ۾ هڪ جامد نسٽڊ ڪلاس آهي: Drawing(جهاز جي انجنيئرنگ بليو پرنٽ جي نمائندگي ڪندي). اسان هي ڪلاس استعمال ڪريون ٿا جهاز جي باري ۾ سڀ سرڪاري معلومات گڏ ڪرڻ لاءِ. اسان جي مثال ۾، سادگي لاءِ، اسان هن طبقي کي پيداوار جي سال تائين محدود ڪري ڇڏيو آهي، پر ان ۾ ٻيون به گهڻيون معلومات شامل ٿي سگهن ٿيون. جامد نسٽڊ ڪلاس - 5جيئن اسان گذريل سبق ۾ چيو آهي، اهڙي nested ڪلاس ٺاهڻ سان encapsulation بهتر ٿئي ٿو ۽ وڌيڪ حقيقي تجزيه ۾ حصو وٺندي آهي. جامد ۽ غير جامد nested طبقن جي وچ ۾ ڇا فرق آهي؟ 1. جامد Drawingطبقي جو هڪ اعتراض ٻاهرين طبقي جي مخصوص مثال جي حوالي سان ذخيرو نٿو ڪري. آخري سبق مان سائيڪل جو مثال ياد رکو:
public class Bicycle {

   private String model;
   private int maxWeight;

   public Bicycle(String model, int maxWeight) {
       this.model = model;
       this.maxWeight = maxWeight;
   }

   public void start() {
       System.out.println("Let's go!");
   }

   public class Handlebar {

       public void right() {
           System.out.println("Steer right!");
       }

       public void left() {

           System.out.println("Steer left!");
       }
   }

}
ان سبق ۾، اسان ان حقيقت جي باري ۾ ڳالهايو هو ته اندروني طبقي جو هر هڪ مثال ، اسان کي ناقابل تصور طور تي، ٻاهرئين طبقي Handlebarجي مثال ڏانهن اشارو ڪري ٿو . Bicycleٻاهرين طبقي جي مثال کان سواءِ، اندروني طبقي جو ڪو به وجود ئي نه ٿو ٿي سگهي. جامد اندر ٿيل طبقن لاء، اهو معاملو ناهي. جامد نسٽڊ ڪلاس جو هڪ اعتراض مڪمل طور تي پنهنجي پاڻ تي موجود هجڻ جي قابل هوندو آهي. ان سلسلي ۾، جامد طبقن غير جامد کان وڌيڪ "آزاد" آهن. صرف هڪ شيء توهان کي ڄاڻڻ جي ضرورت آهي ته جڏهن اهڙي شئي ٺاهي، توهان کي ٻاهرئين طبقي جو نالو بيان ڪرڻ گهرجي:
public class Main {

   public static void main(String[] args) {

       Boeing737.Drawing drawing1 = new Boeing737.Drawing();
       Boeing737.Drawing drawing2 = new Boeing737.Drawing();
   }
}
اسان ڪلاس کي جامد ڇو بڻايو Drawingجڏهن آخري سبق ۾ اسان Seatڪلاس کي (سائيڪل جي سيٽ جي نمائندگي ڪندي) غير جامد بڻايو؟ گذريل ڀيري وانگر، اچو ته ٿورو "فلسفو" شامل ڪريو مثال کي سمجھڻ لاء :) هڪ سائيڪل سيٽ جي برعڪس، انجنيئرنگ ڊرائنگ جو تصور سختي سان جهاز جي تصور سان ڳنڍيل ناهي. سائيڪل کان سواء، هڪ الڳ سائيڪل سيٽ اعتراض اڪثر ڪري بي معني ٿي ويندي (جيتوڻيڪ هميشه نه، اسان ان بابت گذريل سبق ۾ ڳالهايو). هڪ انجنيئرنگ ڊرائنگ جو تصور پنهنجو پاڻ تي احساس پيدا ڪري ٿو. مثال طور، اهو ڪارائتو ٿي سگهي ٿو انجنيئرن لاءِ هوائي جهاز جي سار سنڀال. هوائي جهاز جي ضرورت نه آهي منصوبي ٺاهڻ لاء ۽ ڪٿي به واقع ٿي سگهي ٿو. صرف انجنيئرنگ ڊرائنگ جي ضرورت آهي. ان کان سواء، ساڳئي ماڊل جي سڀني جهازن ۾ ساڳي انجنيئر ڊرائنگ هوندي، تنهنڪري ڪو به اهڙو تنگ تعلق نه آهي جيڪو سائيڪل جي سيٽ سان موجود آهي. تنهن ڪري، هڪ Drawingاعتراض هڪ مخصوص هوائي جهاز جي اعتراض جي حوالي جي ضرورت ناهي. 2. ٻاهرين طبقي جي مختلف قسمن ۽ طريقن تائين رسائي. هڪ جامد نسٽڊ ڪلاس صرف ٻاهرين طبقي جي جامد شعبن تائين رسائي ڪري سگهي ٿو. اسان جي مثال ۾، Drawingڪلاس ۾ ھڪڙو طريقو آھي جيڪو واپسي ڪلاس جي getMaxPassengersCount()جامد متغير جي قيمت ڏي ٿو . تنهن هوندي، اسان ڪلاس ۾ هڪ طريقو maxPassengersCountٺاهي نٿا سگهون جو قدر واپس ڪرڻ لاء . سڀ کان پوء، متغير غير جامد آهي، جنهن جو مطلب آهي ته اهو هڪ خاص مثال سان تعلق رکي ٿو . ۽ جيئن ته اسان اڳ ۾ ئي دريافت ڪيو آهي، جامد نسٽڊ طبقن جي صورت ۾، ٻاهرئين طبقي جو اعتراض آساني سان غير حاضر ٿي سگهي ٿو. انهيء ڪري، حد :) اهو مسئلو ناهي ته ڪهڙي رسائي موڊيفائر هڪ جامد متغير ٻاهرين طبقي ۾ آهي. جيتوڻيڪ اهو آهي ، هڪ جامد نسٽڊ ڪلاس اڃا تائين رسائي هوندي. مٿي ڏنل سڀئي لاڳو ٿين ٿا نه رڳو جامد متغيرن تائين رسائي، پر جامد طريقن تي پڻ. اهم! اندروني طبقي جي اعلان ۾، لفظ جو مطلب اهو ناهي ته توهان صرف هڪ اعتراض ٺاهي سگهو ٿا. متغيرن سان شين کي الجھن نه ڏيو. جيڪڏهن اسان جامد متغيرن جي باري ۾ ڳالهائي رهيا آهيون، ته پوء، ها، اتي موجود آهي هڪ واحد مثال جامد طبقي متغير جو، مثال طور، . پر جڏهن nested طبقي تي لاڳو ٿئي ٿو، ان جو مطلب صرف اهو آهي ته ان جي شين ۾ ٻاهرئين طبقي جي شين جا حوالا شامل نه آهن. ۽ اسان پاڻ ۾ ڪيتريون ئي شيون ٺاهي سگهون ٿا جيئن اسان چاهيون ٿا: getManufactureYear()DrawingmanufactureYearmanufactureYearBoeing737privatestaticmaxPassangersCountstatic
public class Boeing737 {

   private int manufactureYear;
   private static int maxPassengersCount = 300;

   public Boeing737(int manufactureYear) {
       this.manufactureYear = manufactureYear;
   }

   public int getManufactureYear() {
       return manufactureYear;
   }

   public static class Drawing {

       private int id;

       public Drawing(int id) {
           this.id = id;
       }

       public static int getPassengersCount() {

           return maxPassengersCount;
       }

       @Override
       public String toString() {
           return "Drawing{" +
                   "id=" + id +
                   '}';
       }

       public static void main(String[] args) {

           for (int i = 1; i < 6; i++) {

               Boeing737.Drawing drawing = new Boeing737.Drawing(i);
               System.out.println(drawing);
           }
       }
   }
}
اسان ان main()طريقي کي سڌو سنئون نيسٽڊ ڪلاس ۾ قرار ڏنو (ان لاءِ ڪو خاص سبب نه آهي - صرف توهان کي ٻڌائڻ لاءِ ته اهو ممڪن آهي) ۽ 5 Drawingشيون ٺاهيون. ان حقيقت جي باوجود ته اسان وٽ ٻاهرين طبقي جو هڪ به اعتراض ڪونهي. جئين توهان ڏسي سگهو ٿا، هي ڪو به مسئلو نه پيدا ڪيو :) ڪنسول آئوٽ:

Drawing{id=1} 
Drawing{id=2} 
Drawing{id=3} 
Drawing{id=4} 
Drawing{id=5}
۽ اهو اسان جو سبق ختم ڪري ٿو! بس صورت ۾، مان توهان کي Oracle دستاويزن ۾ انهن بابت سيڪشن جي هڪ لنڪ ڇڏي ڏيندس . جيڪڏهن ڪجھ اڃا به واضح نه رهي، ان کي پڙهو. هاڻي اهو وقت آهي مون لاءِ ڪجهه ڪم حل ڪرڻ لاءِ! :)
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION