यह संभव है लेकिन आपके पास यह तरीका नहीं है।
आपको बेस क्लास में नो-एर्ग कन्स्ट्रक्टर जोड़ना होगा और यही वह है!
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";
}
}
जब आप कक्षा में कोई कन्स्ट्रक्टर (कोई भी) नहीं जोड़ते हैं तो संकलक डिफ़ॉल्ट रूप से आपके लिए कोई तर्क नियंत्रक नहीं जोड़ता है।
जब कोई अपमान सुपर(); और चूंकि आपके पास सुपर क्लास में नहीं है, इसलिए आपको वह त्रुटि संदेश मिलता है।
यह सवाल स्वयं के बारे में है।
अब, इस सवाल का जवाब का विस्तार:
आप जानते हैं कि एक उपवर्ग (व्यवहार) बनाने अलग एक अलग मूल्य (डेटा) निर्दिष्ट करने के लिए कर रहे हैं कोई मतलब नहीं है ?? !!! मुझे उम्मीद है कि तुम करोगे।
यदि परिवर्तन की एकमात्र चीज "नाम" है तो एक वर्ग पैरामीट्रिज्ड पर्याप्त है!
तो आप इस की जरूरत नहीं है:
MyClass a = new A("A");
MyClass b = new B("B");
MyClass c = new C("C");
MyClass d = new D("D");
या
MyClass a = new A(); // internally setting "A" "B", "C" etc.
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");
If I were to change the method signature of the BaseClass constructor, I would have to change all the subclasses.
खैर इसलिए विरासत विरूपण साक्ष्य है जो उच्च युग्मन बनाता है, जो अंडे है ओओ सिस्टम में sirable। इसे टाला जाना चाहिए और शायद संरचना के साथ बदल दिया जाना चाहिए।
सोचें कि क्या आपको वास्तव में वास्तव में उन्हें उप-वर्ग के रूप में आवश्यकता है।
public interface NameAware {
public String getName();
}
class A implements NameAware ...
class B implements NameAware ...
class C ... etc.
यहाँ बी और सी एक जो उन के बीच में एक बहुत ही उच्च युग्मन बनाया होगा से विरासत में मिला हो सकता था, इंटरफेस युग्मन कम हो जाता है का उपयोग करके, अगर एक निर्णय लेता है यह होगा: देखें क्यों तुम बहुत बार insted इस्तेमाल किया इंटरफ़ेस है अब "नेमअवेयर" नहीं होगा अन्य वर्ग तोड़ नहीं जाएंगे।
बेशक, यदि आप व्यवहार का पुन: उपयोग करना चाहते हैं तो यह काम नहीं करेगा।
कृपया, 'अनावश्यक' निर्माता छोड़ दें! यह आपके कोड की पठनीयता को बनाए रखता है और सभी आधुनिक आईडीई इसे स्वचालित रूप से बना सकते हैं, इसलिए आपको केवल एक शॉर्टकट कुंजी रखना होगा। –
एक साल बाद अपना खुद का प्रश्न दोबारा पढ़ना और यह मेरे लिए होता है कि मैं कन्स्ट्रक्टर (बेस क्लास में शामिल) को हटा सकता था जैसे कि मैट बी सुझाव दिया गया था, और फिर उदाहरण बनाने के लिए एक स्थिर फैक्ट्री विधि का उपयोग करें। – Joel