किसी क्लास का इंस्टेंस बनाने के लिए उसके कंस्ट्रक्टर को new ऑपरेटर से कॉल किया जाता है।
कंस्ट्रक्टर एक खास तरह का मेथड होता है, जिसका उद्देश्य नए बने इंस्टेंस को शुरुआती वैल्यू देकर तैयार करना है।
कंस्ट्रक्टर दिखने में आम मेथड जैसे ही होते हैं, लेकिन इनका कोई रिटर्न टाइप नहीं होता और इनका नाम क्लास के नाम से मेल खाता है।
class Library {
private int books;
public Library() {
// Initialize the books field
this.books = 10;
}
}
// This will call the constructor
var library = new Library();
आम मेथड की तरह कंस्ट्रक्टर में भी पैरामीटर हो सकते हैं। कंस्ट्रक्टर के पैरामीटर आम तौर पर (प्राइवेट) फील्ड के रूप में संग्रहीत कर दिए जाते हैं, ताकि बाद में उनका उपयोग किया जा सके, या फिर वे किसी एक बार की गणना में काम आते हैं। कंस्ट्रक्टर को आर्गुमेंट भी उसी तरह दिए जा सकते हैं, जैसे आम मेथड को आर्गुमेंट दिए जाते हैं।
class Building {
private int numberOfStories;
private int totalHeight;
public Building(int numberOfStories, double storyHeight) {
this.numberOfStories = numberOfStories;
this.totalHeight = numberOfStories * storyHeight;
}
}
// Call a constructor with two arguments
var largeBuilding = new Building(55, 6.2);
इस अभ्यास में आप अलग-अलग तरह की रिमोट कंट्रोल कारों के बीच दौड़ का आयोजन करेंगे। हर कार की अपनी गति और अपनी बैटरी ड्रेन होती है।
कारें पूरी (100%) बैटरी के साथ शुरू होती हैं। जितनी बार आप रिमोट कंट्रोल से कार चलाते हैं, कार अपनी गति के बराबर मीटर तय करती है और बची हुई बैटरी का प्रतिशत अपनी बैटरी ड्रेन के बराबर घट जाता है।
अगर किसी कार की बैटरी उसके बैटरी ड्रेन प्रतिशत से कम हो, तो आप उस कार को और नहीं चला सकते।
हर रेस ट्रैक की अपनी दूरी होती है। कारों की जाँच यह देखकर की जाती है कि वे बैटरी खत्म हुए बिना ट्रैक पूरा कर पाती हैं या नहीं।
आपके पास छह काम हैं, और हर काम में आप रिमोट कंट्रोल कार के इंस्टेंस के साथ काम करेंगे।
रिमोट कंट्रोल कार बनाने के लिए NeedForSpeed क्लास का एक कंस्ट्रक्टर बनाइए। यह कंस्ट्रक्टर अपने दो पैरामीटर के रूप में कार की गति (मीटर में) और बैटरी ड्रेन का प्रतिशत लेता है (दोनों int टाइप के):
int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);
रेस ट्रैक बनाने के लिए RaceTrack क्लास का एक कंस्ट्रक्टर बनाइए। यह कंस्ट्रक्टर अपने एकमात्र पैरामीटर के रूप में ट्रैक की दूरी (मीटर में) लेता है (जिसका टाइप int है):
int distance = 800;
var raceTrack = new RaceTrack(distance);
NeedForSpeed.drive() मेथड लागू कीजिए, जो कार की गति के अनुसार तय किए गए मीटरों की संख्या बदलता है। साथ ही NeedForSpeed.distanceDriven() मेथड भी लागू कीजिए, जो कार द्वारा तय किए गए मीटरों की संख्या लौटाता है:
int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);
car.drive();
car.distanceDriven();
// => 5
NeedForSpeed.drive() मेथड को ऐसे बदलिए कि वह कार की बैटरी ड्रेन के अनुसार बैटरी खत्म करे। साथ ही NeedForSpeed.batteryDrained() मेथड लागू कीजिए, जो बताता है कि बैटरी इतनी खत्म हो चुकी है कि कार चलाई नहीं जा सकती:
int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);
car.drive();
car.batteryDrained();
// => false
सबसे ज़्यादा बिकने वाली रिमोट कंट्रोल कार नाइट्रो है, जिसकी कमाल की अधिकतम गति 50 मीटर है और बैटरी ड्रेन 4% है। इस तरह की कार लौटाने के लिए (स्टैटिक) NeedForSpeed.nitro() मेथड लागू कीजिए:
var car = NeedForSpeed.nitro();
car.drive();
car.distanceDriven();
// => 50
दौड़ पूरी करने के लिए कार को दौड़ की दूरी चल पाना ज़रूरी है। यानी फिनिश लाइन पार करने से पहले उसकी बैटरी खत्म नहीं होनी चाहिए। RaceTrack.canFinishRace() मेथड लागू कीजिए। यह मेथड अपने पैरामीटर के रूप में एक NeedForSpeed इंस्टेंस लेता है और true लौटाता है अगर कार दौड़ पूरी कर सकती हो; वरना false लौटाता है:
int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);
int distance1 = 100;
var race1 = new RaceTrack(distance1);
int distance2 = 300;
var race2 = new RaceTrack(distance2);
race1.canFinishRace(car);
// => true
race2.canFinishRace(car);
// => false
Exercism पर साइन अप कीजिए और Java को 26 कॉन्सेप्ट158 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।