CodeGym /جاوا بلاگ /Random-UR /جامد نیسٹڈ کلاسز
John Squirrels
سطح
San Francisco

جامد نیسٹڈ کلاسز

گروپ میں شائع ہوا۔
ہائے! ہم جاوا میں نیسٹڈ کلاسز کے موضوع کو تلاش کرتے رہتے ہیں۔ پچھلی مشق میں، ہم نے غیر جامد نیسٹڈ کلاسز کے بارے میں بات کی تھی، جنہیں اندرونی کلاسز کے نام سے بھی جانا جاتا ہے، جامد نیسٹڈ کلاسز - 1آج ہم کلاسوں کے دوسرے گروپ کی طرف بڑھتے ہیں۔ ہم جامد نیسٹڈ کلاسز پر غور کریں گے۔ جامد نیسٹڈ کلاسز - 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جیسا کہ ہم نے پچھلے سبق میں کہا، اس طرح کی نیسٹڈ کلاس بنانا انکیپسولیشن کو بہتر بناتا ہے اور زیادہ حقیقت پسندانہ تجرید میں حصہ ڈالتا ہے۔ جامد اور غیر جامد نیسٹڈ کلاسوں میں کیا فرق ہے؟ 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کوئی طریقہ نہیں بنا سکتے ۔ بہر حال، متغیر غیر جامد ہے، جس کا مطلب ہے کہ اس کا تعلق مخصوص مثال سے ہونا چاہیے ۔ اور جیسا کہ ہم پہلے ہی دریافت کر چکے ہیں، سٹیٹک نیسٹڈ کلاسز کے معاملے میں، بیرونی کلاس کا اعتراض آسانی سے غائب ہو سکتا ہے۔ لہذا، حد :) اس سے کوئی فرق نہیں پڑتا ہے کہ بیرونی طبقے میں جامد متغیر کے پاس کون سا رسائی موڈیفائر ہے۔ یہاں تک کہ اگر یہ ہے ، ایک جامد نیسٹڈ کلاس کو پھر بھی رسائی حاصل ہوگی۔ مذکورہ بالا تمام چیزیں نہ صرف جامد متغیرات تک رسائی پر لاگو ہوتی ہیں بلکہ جامد طریقوں پر بھی لاگو ہوتی ہیں۔ اہم! اندرونی طبقے کے اعلان میں، کلیدی لفظ کا مطلب یہ نہیں ہے کہ آپ صرف ایک آبجیکٹ بنا سکتے ہیں۔ متغیرات کے ساتھ اشیاء کو الجھائیں نہیں۔ اگر ہم جامد متغیر کے بارے میں بات کر رہے ہیں، تو، ہاں، ایک جامد کلاس متغیر کی ایک مثال موجود ہے، مثال کے طور پر، ۔ لیکن جب کسی نیسٹڈ کلاس پر لاگو ہوتا ہے تو اس کا مطلب صرف یہ ہوتا ہے کہ اس کی اشیاء میں بیرونی طبقے کی اشیاء کے حوالے نہیں ہوتے ہیں۔ اور ہم خود جتنی اشیاء چاہیں بنا سکتے ہیں: 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}
اور یہ ہمارے سبق کو ختم کرتا ہے! صرف اس صورت میں، میں آپ کو اوریکل دستاویزات میں ان کے بارے میں سیکشن کا لنک چھوڑ دوں گا ۔ اگر کچھ اب بھی واضح نہیں ہے تو اسے پڑھیں۔ اب وقت آگیا ہے کہ میں ایک دو کام حل کروں! :)
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION