कोई रास्ता नहीं है। आपको test
का विस्तार करने में सक्षम होने के लिए एक सुपर (protected
, public
या डिफ़ॉल्ट) सुपर कन्स्ट्रक्टर बनाना होगा।
इस प्रकार का नोटेशन आमतौर पर यूटिलिटी क्लासेस या सिंगलेट्स में उपयोग किया जाता है, जहां आप नहीं चाहते हैं कि उपयोगकर्ता स्वयं को अपनी कक्षा का एक उदाहरण बनाये, या तो इसे विस्तारित करके और सबक्लास को इंस्टेंस करना, या बस कन्स्ट्रक्टर को कॉल करके आपकी कक्षा।
जब आप केवल private
कंस्ट्रक्टर्स के साथ एक class
है, तो आप भी class
final
क्योंकि यह बिल्कुल नहीं बढ़ाई जा सकती बदल सकते हैं।
एक अन्य समाधान test
जो test
के उदाहरण बना सकते हैं और एक test
उदाहरण के लिए One
से हर विधि कॉल को सौंपने में एक विधि होने दी जाएगी। इस तरह आपको test
का विस्तार करने की आवश्यकता नहीं है।
class Test {
private Test() {
System.out.println("test");
}
public static Test getInstance(){
return new Test();
}
public void methodA(){
//Some kind of implementation
}
}
public class One {
private final Test test;
One() {
System.out.println("One");
test = Test.getInstance();
}
public void methodA(){
test.methodA();
}
public static void main(String args[]) {
new One();
}
}
स्रोत
2010-10-17 10:22:46
कक्षा 'टेस्ट' की विधि' getInstance() 'विधि स्थिर होना चाहिए। अन्यथा 'test.getInstance()' जैसे कॉल करना संभव नहीं है। – vanje
@vanje, धन्यवाद, –