JavaRush /جاوا بلاگ /Random-SD /مثال ۽ وراثت جي بنياديات

مثال ۽ وراثت جي بنياديات

گروپ ۾ شايع ٿيل
سلام! پوئين ليڪچرن ۾، اسان اڳ ۾ ئي مختصر طور تي وراثت جي تصور سان ڪيترائي ڀيرا سامهون آيا آهيون. اڄ اسان هن موضوع تي پڻ رابطو ڪنداسين، پر تمام گهڻو نه. ان بابت تفصيلي ليڪچر بعد ۾ ڏنا ويندا، پر اڄ اسين صرف عملي مثالن تي نظر وجهنداسين ۽ جاوا ۾ هڪ دلچسپ آپريٽر سان واقفيت ڪنداسين.

جاوا وراثت

تنهن ڪري، وراثت ڇا آهي؟ مثال ۽ وراثت جا بنيادي - 1وراثت پروگرامنگ ۾ هڪ ميکانيزم آهي، جاوا سميت، جيڪا توهان کي موجوده هڪ جي بنياد تي نئين طبقي کي بيان ڪرڻ جي اجازت ڏئي ٿي. نسلي طبقو وري والدين طبقي جي شعبن ۽ طريقن تائين رسائي حاصل ڪري ٿو. اهو ڇو ضروري ٿي سگهي ٿو؟ خير، مثال طور، تصور ڪريو ته توهان کي پروگرام ۾ ڪارن جا ڪيترائي طبقا ٺاهڻ گهرجن: ٽرڪ، ريسنگ، Sedan، Pickup وغيره. جيتوڻيڪ ڪوڊ لکڻ شروع ڪرڻ کان سواء، توهان کي پڪ سان ڄاڻو ٿا ته انهن طبقن ۾ تمام گهڻو عام آهي: سڀني ڪارن جو هڪ ماڊل نالو، تعمير جو سال، انجڻ جي سائيز، وڌ ۾ وڌ رفتار، وغيره. (انهي حقيقت جو ذڪر نه ڪرڻ گهرجي ته انهن سڀني کي سائيڪلون ۽ ٻيا حصا آهن). اهڙي صورتحال ۾، توهان ڪري سگهو ٿا:
  • انهن شعبن کي هر ڪلاس ۾ ٺاهيو ۽ انهن کي نئين ڪار ڪلاس ۾ شامل ڪريو جڏهن اهي ٺاهيا وڃن
  • سڀني مشينن لاءِ عام شعبن کي پيرن ڪلاس ۾ منتقل ڪريو Car، ۽ مخصوص قسم جي مشينن جا سڀ طبقا ورثي ۾ ملن ٿا Carلفظ extensions استعمال ڪرڻ کان .
ٻيو اختيار، يقينا، گهڻو وڌيڪ آسان آهي:
public class Car {

   private String model;
   private int maxSpeed;
   private int yearOfManufacture;

   public Car(String model, int maxSpeed, int yearOfManufacture) {
       this.model = model;
       this.maxSpeed = maxSpeed;
       this.yearOfManufacture = yearOfManufacture;
   }
}

public class Truck extends Car {

   public Truck(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}

public class Sedan extends Car {
   public Sedan(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}
گهٽ ۾ گهٽ، اسان ڪوڊ جي غير ضروري نقل کان پاسو ڪيو آهي، ۽ اهو ڪجهه آهي جنهن لاءِ اسان کي هميشه ڪوشش ڪرڻ گهرجي جڏهن پروگرام لکڻ وقت. ان کان علاوه، اسان وٽ ھڪڙو سادو ۽ سمجھڻ وارو طبقو آھي: سڀني مشينن لاء عام فيلڊ ھڪڙي طبقي ۾ رکيل آھن. جيڪڏهن، مثال طور، ٽرڪون ڪجهه مخصوص فيلڊ آهن جيڪي ٻيون ڪارٽون نه هونديون آهن، انهن کي Truck. ساڳيو ئي طريقن لاء وڃي ٿو. سڀني ڪارن ۾ ڪجھ عام رويي آھن جيڪي بيان ڪري سگھجن ٿيون: ڪار شروع ڪريو، گيس/بريڪ، وغيره. اهي عام طريقا هڪ عام طبقي ۾ رکي سگهجن ٿا Car، ۽ هر مخصوص قسم جي مخصوص رويي کي نسلي طبقن ۾ بيان ڪري سگهجي ٿو.
public class Car {

   public void gas() {
       //...gas
   }

   public void brake() {
       //...brake
   }
}


public class F1Car extends Car {

   public void pitStop() {

       //...only racing cars make pit stops
   }

   public static void main(String[] args) {

       F1Car formula1Car = new F1Car();
       formula1Car.gas();
       formula1Car.pitStop();
       formula1Car.brake();
   }
}
اسان سڀني ڪارن جي عام طريقن کي ڪلاس ۾ منتقل ڪيو آهي Car. پر جانشين ڪلاس ۾ F1Car، جيڪو بيان ڪري ٿو فارمولا 1 ريسنگ ڪارون - پٽي اسٽاپ (ڪار جي تڪڙي سار سنڀال لاءِ اسٽاپ)، جيڪي صرف ريسنگ ۾ ڪيا ويا آهن ۽ مخصوص رويي جي ڪري فرق آهن.

جاوا مثال آپريٽر

چيڪ ڪرڻ لاءِ ته ڇا ڪا شئي ڪلاس جي بنياد تي ٺاهي وئي آهي، جاوا ۾ هڪ خاص آپريٽر آهي - instanceof. اهو قيمت واپس ڏئي ٿو trueجيڪڏهن ٽيسٽ صحيح هئي، يا falseجيڪڏهن نتيجو غلط هو. اچو ته ڏسو ته اهو ڪيئن ڪم ڪري ٿو اسان جي ڪار ڪلاس استعمال ڪندي مثال طور:
public class Truck extends Car {

   public static void main(String[] args) {

       Truck truck = new Truck();
       System.out.println(truck instanceof Car);
   }
}
آئوٽ پُٽ: صحيح آپريٽر استعمال ڪندي چيڪ instanceofواپس آيو true، ڇو ته اسان وٽ ڪلاس جو هڪ اعتراض آهي Truck، ۽ سڀئي ٽرڪون ڪارون آهن. ڪلاس طبقي Truckجو اولاد آهي Car، تنهن ڪري، سڀئي ٽرڪون هڪ عام والدين جي بنياد تي ٺاهيا ويا آهن - هڪ ڪار. آپريٽر تي ڌيان ڏيو instanceof: اهو ڊٽ کان سواء لکيو ويو آهي، ڇاڪاڻ ته اهو هڪ آپريٽر آهي، نه هڪ طريقو ("ڪلاس جو اعتراض مثال"). اچو ته ان کي مختلف طور تي ڪوشش ڪريو:
public static void main(String[] args) {

   Car car = new Car();
   System.out.println(car instanceof Truck);
}
آئوٽ: غلط طبقو Car۽، مطابق، ان جو اعتراض ڪلاس مان نڪرندو آهي Truck.سڀ ٽرڪون ڪارون آهن، پر سڀئي ڪارون ٽرڪون نه آهن. Carڪلاس جي بنياد تي شيون پيدا نه ڪيون ويون آهن Truck. هڪ وڌيڪ مثال:
public static void main(String[] args) {

   Car car = new Car();
   Truck truck = new Truck();
   System.out.println(car instanceof Object && truck instanceof Object);
}
Output: True هتي منطق به سادو آهي: جاوا ۾ سڀئي ڪلاس، بشمول اهي جيڪي توهان ٺاهيا آهن، هڪ ڪلاس مان ايندا آهن (جيتوڻيڪ توهان انهن ۾ Extensions ObjectObject نه لکندا آهيو - اهو ميڪانيزم انهن ۾ شامل آهي). اهو ڇو مفيد ٿي سگهي ٿو ۽ ڪهڙين حالتن ۾؟ آپريٽر جو سڀ کان عام استعمال طريقو اوور رائڊ طور آھي . مثال طور، ھتي آھي ڪيئن طريقو ڪلاس ۾ لاڳو ڪيو ويو آھي : instanceofequals()equalsString
public boolean equals(Object anObject) {
   if (this == anObject) {
       return true;
   }
   if (anObject instanceof String) {
       String anotherString = (String) anObject;
       int n = value.length;
       if (n == anotherString.value.length) {
           char v1[] = value;
           char v2[] = anotherString.value;
           int i = 0;
           while (n-- != 0) {
               if (v1[i] != v2[i])
                       return false;
               i++;
           }
           return true;
       }
   }
   return false;
}
پاس ٿيل اعتراض سان اسٽرنگ جو مقابلو ڪرڻ کان اڳ، طريقو چيڪ ڪري ٿو: ڇا پاس ٿيل اعتراض اصل ۾ هڪ تار آهي؟ ۽ صرف ان کان پوء هو ٻن شين جي ملڪيت جي مقابلي ڪرڻ شروع ڪري ٿو. هن چيڪ کان سواءِ، توهان ڪنهن به شئي کي پاس ڪري سگهو ٿا جنهن ۾ قدر ۽ ڊگھائي جا شعبا هجن ۽ ان کي هڪ تار سان ڀيٽيو، جيڪو يقيناً غلط هوندو.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION