JavaRush /جاوا بلاگ /Random-SD /جامد نسٽڊ ڪلاس

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

گروپ ۾ شايع ٿيل
سلام! اسان جاوا ۾ nested طبقن جي موضوع کي ڳولڻ جاري رکون ٿا. پوئين سبق ۾ اسان غير جامد نسٽڊ طبقن بابت ڳالهايو يا، جيئن انهن کي اندروني طبقن پڻ سڏيو وڃي ٿو. جامد نسٽڊ ڪلاس - 2اڄ اچو ته ٻئي گروپ ڏانهن وڃو ۽ جامد نسٽڊ ڪلاس تي هڪ ويجهي نظر رکون. جامد نسٽڊ ڪلاس - 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 طبقن جي وچ ۾ ڇا فرق آهي؟ 1. هڪ جامد ڪلاس اعتراض Drawingٻاهرئين طبقي جي مخصوص مثال جي حوالي سان ذخيرو نٿو ڪري. سائيڪل سان آخري ليڪچر مان مثال ياد رکو:
public class Bicycle {

   private String model;
   private int mawWeight;

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

   public void start() {
       System.out.println("Go!");
   }

   public class SteeringWheel {

       public void right() {
           System.out.println("Steering wheel to the right!");
       }

       public void left() {

           System.out.println("Steering wheel to the left!");
       }
   }

}
اتي اسان ڳالهه ڪئي ته ڪيئن SteeringWheelٻاهرئين طبقي جي ڪنهن شئي (سائيڪل) جو حوالو اسان کي بغير ڪنهن نوٽيس جي اندروني طبقي (اسٽيئرنگ ويل) جي هر مثال ڏانهن منتقل ڪيو ويندو آهي 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خارجي طبقي مان موٽائي ٿو. تنهن هوندي، اسان هڪ طريقو ٺاهي نٿا سگهون هڪ قدر واپس ڪرڻ getManufactureYear()لاء . سڀ کان پوء، هڪ متغير غير جامد آهي، جنهن جو مطلب آهي ته اهو هڪ خاص مثال سان تعلق رکي ٿو . ۽ جيئن ته اسان اڳ ۾ ئي معلوم ڪري چڪا آهيون، جامد نسٽڊ طبقن جي صورت ۾، ٻاهرئين طبقي جو اعتراض آساني سان غائب ٿي سگهي ٿو. انهيءَ ڪري حد بندي :) اهو فرق نٿو پوي ته ٻاهرئين طبقي ۾ جامد متغير کي ڪهڙي رسائي موڊيفائر آهي. جيتوڻيڪ اهو آهي ، اتي اڃا تائين رسائي هوندي جامد نسٽڊ ڪلاس کان. مٿين سڀني خدشات نه رڳو جامد متغيرن تائين رسائي، پر جامد طريقن تائين پڻ. اهم! اندروني طبقي جي اعلان ۾ لفظ جو مطلب اهو ناهي ته صرف هڪ اعتراض ٺاهي سگهجي ٿو. متغيرن سان شين کي الجھن نه ڏيو. جيڪڏهن اسان جامد متغير بابت ڳالهائي رهيا آهيون، ها، هڪ جامد طبقي متغير، مثال طور، هڪ واحد ڪاپي ۾ موجود آهي. پر جڏهن nested طبقي تي لاڳو ٿئي ٿو، ان جو مطلب صرف اهو آهي ته ان جي شين ۾ ٻاهرئين طبقي جي شين جا حوالا شامل نه آهن. ۽ اسان ڪيتريون ئي شيون ٺاهي سگهون ٿا جيئن اسان چاهيون ٿا: 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