new
आणि सर्व काही तयार आहे :) जेव्हा आपण लिहितो तेव्हा संगणक आणि जावा मशीनमध्ये काय होते याबद्दल आपण येथे बोलू, उदाहरणार्थ:
Cat cat = new 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);
}
}
Java मशीनसाठी, प्रक्रिया यासारखी दिसेल:
-
पहिली गोष्ट जी घडते ती म्हणजे क्लासचे स्टॅटिक व्हेरिएबल्स
Vehicle
इनिशियलाइज केले जातात . होय, मीVehicle
वर्ग म्हणालो, नाहीTruck
. कंस्ट्रक्टरला कॉल करण्यापूर्वी स्टॅटिक व्हेरिएबल्स सुरू केले जातात आणि हे पॅरेंट क्लासमध्ये सुरू होते. चला हे सत्यापित करण्याचा प्रयत्न करूया. आम्हीvehicleCounter
फील्ड 10 च्या बरोबरीने वर्गात सेट करतो आणि ते आणि कन्स्ट्रक्टरVehicle
दोन्हीमध्ये प्रदर्शित करण्याचा प्रयत्न करतो .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
प्रदर्शित केव्हा सुरू केले गेले नाहीत याची खात्री करण्यासाठी आम्ही मुद्दामच कन्स्ट्रक्टरच्या अगदी सुरुवातीला println स्टेटमेंट ठेवतो .आणि येथे परिणाम आहे:
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