
new
، ۽ سڀ ڪجهه تيار آهي :) هتي اسان ڳالهائينداسين ته ڪمپيوٽر ۽ جاوا مشين جي اندر ڇا ٿئي ٿو جڏهن اسان لکندا آهيون، مثال طور:
Cat cat = new Cat();
اسان ان بابت اڳ ۾ ڳالهايو آهي، پر صرف ان صورت ۾ اسان توهان کي ياد ڏينداسين:
- پهرين، اعتراض کي محفوظ ڪرڻ لاء ميموري مختص ڪئي وئي آهي.
- اڳيون، جاوا مشين اعتراض جو حوالو ٺاهي ٿو (اسان جي صورت ۾ حوالو Cat cat آهي).
- آخرڪار، متغيرن جي شروعات ڪئي وئي آهي ۽ تعمير ڪندڙ سڏيو ويندو آهي (اسين هن عمل کي وڌيڪ تفصيل سان ڏسڻ وارا آهيون).

public class Vehicle {
public static int vehicleCounter = 0;
private String description = "Vehicle";
public Vehicle() {
}
public String getDescription() {
return description;
}
}
public class Truck extends Vehicle {
private static int truckCounter = 0;
private int yearOfManufacture;
private String model;
private int maxSpeed;
public Truck(int yearOfManufacture, String model, int maxSpeed) {
this.yearOfManufacture = yearOfManufacture;
this.model = model;
this.maxSpeed = maxSpeed;
Vehicle.vehicleCounter++;
truckCounter++;
}
}
ڪلاس Truck
ھڪڙي ٽرڪ جو عمل آھي جنھن جي شعبن جي نمائندگي ڪندي پنھنجي سال، ماڊل، ۽ وڌ ۾ وڌ رفتار. هاڻي اسان هڪ اهڙي شئي ٺاهڻ چاهيون ٿا:
public class Main {
public static void main(String[] args) throws IOException {
Truck truck = new Truck(2017, "Scania S 500 4x2", 220);
}
}
جاوا مشين ڏانهن، عمل هن طرح نظر ايندو:
-
پهرين شيء جيڪا ٿئي ٿي اها آهي ڪلاس جا جامد متغير
Vehicle
شروعاتي آهن . ها، مون چيوVehicle
ڪلاس، نهTruck
. جامد متغيرن کي شروعات ڪرڻ کان اڳ ٺاھيندڙن کي سڏيو وڃي ٿو، ۽ اھو شروع ٿئي ٿو والدين طبقي ۾. اچو ته ان جي تصديق ڪرڻ جي ڪوشش ڪريو. اسان ڪلاسvehicleCounter
۾ فيلڊ کيVehicle
10 جي برابر مقرر ڪيو ۽ ان کي ٻنهيVehicle
۽Truck
تعمير ڪندڙن ۾ ڏيکارڻ جي ڪوشش ڪريو.public class Vehicle { public static int vehicleCounter = 10; private String description = "Vehicle"; public Vehicle() { System.out.println(vehicleCounter); } public String getDescription() { return description; } } public class Truck extends Vehicle { private static int truckCount = 0; private int yearOfManufacture; private String model; private int maxSpeed; public Truck(int yearOfManufacture, String model, int maxSpeed) { System.out.println(vehicleCounter); this.yearOfManufacture = yearOfManufacture; this.model = model; this.maxSpeed = maxSpeed; Vehicle.vehicleCounter++; truckCount++; } }
اسان عمدي طور پرنٽ ايلن بيان کي تعمير ڪندڙ جي شروعات ۾ رکون
Truck
ٿا ته پڪ ڪرڻ لاء ته ٽرڪ جي فيلڊ اڃا تائين شروع نه ڪئي وئي آهي جڏهنvehicleCounter
ڏيکاريل آهي.۽ هتي نتيجو آهي:
10 10
-
والدين طبقي جي جامد متغيرن جي شروعات ٿيڻ کان پوء، ٻار طبقي جي جامد متغيرن جي شروعات ڪئي وئي آهي. اسان جي حالت ۾، هي طبقي
truckCounter
جو ميدان آهيTruck
.truckCounter
اچو ته هڪ ٻيو تجربو ڪريون، جتي اسان ڪوشش ڪنداسين ته ڪنسٽرڪٽر جي اندر جي قيمت ڏيکارڻTruck
کان اڳ ٻين شعبن جي شروعات ڪئي وڃي:public class Truck extends Vehicle { private static int truckCounter = 10; private int yearOfManufacture; private String model; private int maxSpeed; public Truck(int yearOfManufacture, String model, int maxSpeed) { System.out.println(truckCounter); this.yearOfManufacture = yearOfManufacture; this.model = model; this.maxSpeed = maxSpeed; Vehicle.vehicleCounter++; truckCounter++; } }
جئين توهان ڏسي سگهو ٿا، قيمت 10 اڳ ۾ ئي مقرر ڪيو ويو آهي اسان جي جامد متغير کي جڏهن
Truck
تعمير ڪندڙ شروع ٿئي ٿي. -
اهو اڃا تائين تعمير ڪندڙن لاء وقت نه آهي! متغير شروعاتي جاري آهي. والدين طبقي جي غير جامد متغيرن کي ٽئين نمبر تي شروع ڪيو ويو آهي. جئين توهان ڏسي سگهو ٿا، وراثت خاص طور تي هڪ اعتراض ٺاهڻ جي عمل کي پيچيده ڪري ٿو، پر اتي ڪجھ به نه آهي جيڪو توهان ان بابت ڪري سگهو ٿا: توهان کي صرف پروگرامنگ ۾ ڪجهه شيون ياد رکڻو پوندو :)
هڪ تجربي جي طور تي، اسان ڪلاس
description
۾ متغير کي ڪجهه شروعاتي قيمت تفويض ڪري سگھون ٿاVehicle
، ۽ پوء ان کي تعمير ڪندڙ ۾ تبديل ڪريو.public class Vehicle { public static int vehicleCounter = 10; private String description = "Initial value of the description field"; public Vehicle() { System.out.println(description); description = "Vehicle"; System.out.println(description); } public String getDescription() { return description; } }
اچو ته اسان جو
main()
طريقو هلون جيڪو ٽرڪ ٺاهي ٿو:public class Main { public static void main(String[] args) throws IOException { Truck truck = new Truck(2017, "Scania S 500 4x2", 220); } }
اسان هيٺ ڏنل نتيجو حاصل ڪندا آهيون:
Initial value of the description field Vehicle
اهو ثابت ٿئي ٿو ته جڏهن
Vehicle
تعمير ڪندڙ شروع ٿئي ٿو تهdescription
فيلڊ اڳ ۾ ئي هڪ قدر مقرر ڪيو ويو آهي. -
آخرڪار، اهو وقت تعمير ڪندڙن لاء آهي! وڌيڪ واضح طور تي، اهو وقت آهي بنيادي طبقي جي تعمير ڪندڙ لاء. اهو اعتراض جي تخليق جي عمل جي چوٿين مرحلي ۾ سڏيو ويندو آهي.
اهو پڻ تصديق ڪرڻ بلڪل آسان آهي. اچو ته ڪنسول ڏانهن ٻه لائينون ڪڍڻ جي ڪوشش ڪريون: هڪ اندر اندر
Vehicle
بنيادي طبقي جي ڪنسٽرڪٽر، ٻي اندرTruck
تعمير ڪندڙ. اسان کي يقين رکڻو پوندو ته ليڪ اندرVehicle
پهرين ڏيکاريل آهي:public Vehicle() { System.out.println("Hello from the Vehicle constructor!"); } public Truck(int yearOfManufacture, String model, int maxSpeed) { System.out.println("Hello from the Truck constructor!"); this.yearOfManufacture = yearOfManufacture; this.model = model; this.maxSpeed = maxSpeed; Vehicle.vehicleCounter++; truckCounter++; }
اسان پنهنجو طريقو هلائينداسين
main()
۽ نتيجو ڏسو:Hello from the Vehicle constructor! Hello from the Truck constructor!
تمام سٺو. ان جو مطلب آهي ته اسان غلط نه آهيون :) اچو ته اڳتي وڌو.
-
ھاڻي اھو وقت آھي ٻاراڻي طبقي جي غير جامد شعبن جي شروعات
Truck
جو، يعني اسان جو ڪلاس. ڪلاس جي اندر فوري طور تي فيلڊ شروع نه ڪيا ويا آهن پنجين قدم تائين! حيرت انگيز، پر سچ :) ٻيهر، اسان هڪ سادي چيڪ ڪنداسين - جيئن والدين طبقي سان: اسان ويريبل جي ڪجهه ابتدائي قيمت ڏينداسينmaxSpeed
۽ تعمير ڪندڙ ۾Truck
اسان چيڪ ڪنداسين ته قيمت تعمير ڪندڙ شروع ٿيڻ کان اڳ مقرر ڪئي وئي هئي:public class Truck extends Vehicle { private static int truckCounter = 10; private int yearOfManufacture; private String model; private int maxSpeed = 150; public Truck(int yearOfManufacture, String model, int maxSpeed) { System.out.println("Initial value of maxSpeed = " + this.maxSpeed); this.yearOfManufacture = yearOfManufacture; this.model = model; this.maxSpeed = maxSpeed; Vehicle.vehicleCounter++; truckCounter++; } }
ڪنسول آئوٽ:
Initial value of maxSpeed = 150
جئين توهان ڏسي سگهو ٿا، جڏهن
Truck
تعمير ڪندڙ شروع ٿئي ٿو،maxSpeed
اڳ ۾ ئي 150 جي برابر آهي! -
ٻار جي طبقي جي تعمير ڪندڙ
Truck
کي سڏيو ويندو آهي.۽ صرف هن موقعي تي، سڀ کان آخر ۾، ڇا ان طبقي جو تعمير ڪندڙ سڏيو ويندو، جنهن کي اسين فوري طور تي سڏي رهيا آهيون!
صرف ڇهين قدم ۾ فيلڊ کي مقرر ڪيو ويندو قدر جيڪي اسان اسان جي ٽرڪ ڏانهن دليلن جي طور تي منتقل ڪندا آهيون.
جئين توهان ڏسي سگهو ٿا، "تعمير" هڪ ٽرڪ، يعني اعتراض ٺاهڻ وارو عمل، سادو ناهي. پر اهو لڳي ٿو ته اسان ان کي ٽوڙي ڇڏيو آهي ننڍن حصن ۾ :)

GO TO FULL VERSION