यह संभव है लेकिन आपके पास ऐसा नहीं है।
आपको आधार वर्ग में एक नो-आर्ग्स कंस्ट्रक्टर को जोड़ना होगा और वह यह है!
public abstract class A {
private String name;
public A(){
this.name = getName();
}
public abstract String getName();
public String toString(){
return "simple class name: " + this.getClass().getSimpleName() + " name:\"" + this.name + "\"";
}
}
class B extends A {
public String getName(){
return "my name is B";
}
public static void main( String [] args ) {
System.out.println( new C() );
}
}
class C extends A {
public String getName() {
return "Zee";
}
}
जब आप एक क्लास में कंस्ट्रक्टर (कोई भी) नहीं जोड़ते हैं, तो कंपाइलर आपके लिए डिफॉल्ट नो arg कंस्ट्रक्टर को जोड़ देता है।
जब अवशिष्ट कोई आर्ग सुपर () को कहता है; और जब से आपके पास यह सुपर क्लास में नहीं है, तो आपको वह त्रुटि संदेश मिलता है।
इस सवाल के बारे में यह स्व।
अब, उत्तर का विस्तार करते हुए:
क्या आप जानते हैं कि एक अलग मूल्य (डेटा) को निर्दिष्ट करने के लिए उपवर्ग (व्यवहार) बनाने से कोई मतलब नहीं है ?? !!! मुझे उम्मीद है कि तुम करोगे।
यदि केवल एक चीज जो परिवर्तन है वह "नाम" है तो एक एकल वर्ग पैराट्राइज्ड पर्याप्त है!
तो आपको इसकी आवश्यकता नहीं है:
MyClass a = new A("A");
MyClass b = new B("B");
MyClass c = new C("C");
MyClass d = new D("D");
या
MyClass a = new A();
MyClass b = new B();
MyClass c = new C();
MyClass d = new D();
जब आप यह लिख सकते हैं:
MyClass a = new MyClass("A");
MyClass b = new MyClass("B");
MyClass c = new MyClass("C");
MyClass d = new MyClass("D");
अगर मुझे बेसक्लास कंस्ट्रक्टर के विधि हस्ताक्षर को बदलना था, तो मुझे सभी उपवर्गों को बदलना होगा।
अच्छी तरह से इसीलिए वंशानुक्रम उच्च युग्मन बनाने वाली कलाकृति है, जो OO प्रणालियों में अवांछनीय है। इसे टाला जाना चाहिए और शायद रचना के साथ प्रतिस्थापित किया जाना चाहिए।
सोचो अगर आपको वास्तव में उपवर्ग के रूप में उनकी आवश्यकता है। इसलिए आप अक्सर उपयोग किए जाने वाले इंटरफेस को देखते हैं:
public interface NameAware {
public String getName();
}
class A implements NameAware ...
class B implements NameAware ...
class C ... etc.
यहाँ B और C को A से विरासत में मिला है जो उनके बीच एक बहुत ही उच्च युग्मन बनाया होगा, इंटरफेस के उपयोग से युग्मन कम हो जाता है, यदि A निर्णय करता है कि यह "NameAware" नहीं होगा तो अन्य कक्षाएं नहीं टूटेंगी।
बेशक, यदि आप व्यवहार का पुन: उपयोग करना चाहते हैं तो यह काम नहीं करेगा।