हर क्लास ऑब्जेक्ट को उसी new कीवर्ड का उपयोग करके बनाया जाता है, इसलिए इसमें उस क्लास के बारे में जानकारी होनी चाहिए जिसका ऑब्जेक्ट इसे बनाना है। इस कारण से, कंस्ट्रक्टर का नाम क्लास के नाम के समान होना चाहिए।
उदाहरण
class MyConstructor {
public MyConstructor() {
System.out.println("The constructor name should be same as the class name");
}
public static void main(String args[]) {
MyConstructor mc = new MyConstructor();
}
}
उपरोक्त प्रोग्राम में, कंस्ट्रक्टर का नाम क्लास के नाम के समान होना चाहिए (MyConstructor)।
आउटपुट
The constructor name should be same as the class name
गहन व्याख्या
क्यों यह डिजाइन निर्णय?
| कारण | व्याख्या |
|---|---|
| पहचान | new ClassName() सिंटैक्स में, क्लास नाम ही कंस्ट्रक्टर को पहचानता है। अलग नाम के लिए अतिरिक्त सिंटैक्स की आवश्यकता होती। |
| सरलता | एक ही नाम भाषा को सरल रखता है - कोई अतिरिक्त कीवर्ड (जैसे constructor) नहीं। |
| कंपाइलर/रनटाइम | JVM को पता होता है कि new MyClass() का अर्थ है MyClass का नो-आर्ग कंस्ट्रक्टर कॉल करना। |
| कन्वेंशन | C++ और अन्य भाषाओं के साथ संगतता। |
कंस्ट्रक्टर की विशेषताएं
- कोई रिटर्न टाइप नहीं (यहां तक कि
voidभी नहीं)। - नाम = क्लास नाम (केस-सेंसिटिव)।
- कंस्ट्रक्टर चेनिंग:
this()(समान क्लास का अन्य कंस्ट्रक्टर) याsuper()(पेरेंट कंस्ट्रक्टर) पहली लाइन होना चाहिए। - डिफ़ॉल्ट कंस्ट्रक्टर: यदि कोई कंस्ट्रक्टर परिभाषित नहीं है, तो कंपाइलर नो-आर्ग कंस्ट्रक्टर प्रदान करता है।
- ओवरलोडिंग: एक क्लास में अलग-अलग पैरामीटर्स के साथ कई कंस्ट्रक्टर हो सकते हैं।
कंस्ट्रक्टर ओवरलोडिंग उदाहरण
public class Student {
private String name;
private int age;
// नो-आर्ग कंस्ट्रक्टर
public Student() {
this("Unknown", 0); // चेनिंग
}
// पैरामीटर्स के साथ
public Student(String name) {
this(name, 0);
}
// पूर्ण कंस्ट्रक्टर
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
कंस्ट्रक्टर vs मेथड
| विशेषता | कंस्ट्रक्टर | मेथड |
|---|---|---|
| नाम | क्लास नाम के समान | कोई भी वैध पहचानकर्ता |
| रिटर्न टाइप | कोई नहीं | आवश्यक (void भी) |
| उद्देश्य | ऑब्जेक्ट आरंभीकरण | व्यवहार/कार्यक्षमता |
| विरासत | विरासत में नहीं मिलते | विरासत में मिलते हैं |
| ओवरराइडिंग | नहीं | हां |
| डिफ़ॉल्ट | कंपाइलर देता है (यदि कोई नहीं) | कंपाइलर नहीं देता |
निष्कर्ष: कंस्ट्रक्टर का नाम क्लास के समान होने से new ClassName() सिंटैक्स स्वाभाविक और अस्पष्टता-मुक्त बनता है। यह ऑब्जेक्ट निर्माण के लिए एक स्पष्ट, मानक प्रवेश बिंदु प्रदान करता है।