जावा में एक उत्सुक चीज होती है जब आप एक इंटरफ़ेस को कार्यान्वित करने के लिए एक अमूर्त वर्ग का उपयोग करते हैं: कुछ इंटरफ़ेस के तरीकों को पूरी तरह से याद किया जा सकता है (यानी न तो एक अमूर्त घोषणा या वास्तविक कार्यान्वयन मौजूद है), लेकिन संकलक शिकायत नहीं करता है।इंटरफ़ेस को लागू करने वाला एक सार वर्ग इंटरफ़ेस के तरीकों में से किसी एक की घोषणा/कार्यान्वयन को याद कर सकता है?
उदाहरण के लिए, इंटरफेस दिया:
public interface IAnything {
void m1();
void m2();
void m3();
}
निम्नलिखित सार वर्ग ख़ुशी से एक चेतावनी या एक त्रुटि के बिना संकलित हो जाता है:
public abstract class AbstractThing implements IAnything {
public void m1() {}
public void m3() {}
}
तुम क्यों की व्याख्या कर सकते हैं?
कोई एक अमूर्त वर्ग का ऑब्जेक्ट नहीं बना सकता है। इसलिए, जब तक एक अमूर्त वर्ग के लिए एक कार्यान्वयन प्रदान नहीं किया जाता है, वस्तुओं को IAnything के लिए नहीं बनाया जा सकता है। तो यह संकलक के लिए बिल्कुल ठीक है। कंपाइलर उम्मीद करता है कि, किसी भी गैर-अमूर्त वर्ग जो IAnything लागू करता है IAnything से घोषित सभी विधियों को लागू करना होगा। और चूंकि ऑब्जेक्ट्स बनाने में सक्षम होने के लिए एबस्ट्रेटिंग को विस्तार और कार्यान्वित करना है, इसलिए संकलक एक त्रुटि फेंक देगा, अगर वह कार्यान्वयन IStthingTing द्वारा छोड़े गए IAthingthing के तरीकों को लागू नहीं करता है। – VanagaS
क्या हम इसे "एडाप्टर डिजाइन पैटर्न" कह सकते हैं? अगर हमने अमूर्त वर्ग में एम 1, एम 2, एम 3 खाली शरीर रखा। तो MyMainClass उस अमूर्त वर्ग को बढ़ाता है और मैं जो भी तरीका चाहता हूं उसे ओवरराइड करने के लिए स्वतंत्र हूं, सभी विधियों को ओवरराइड करने के लिए कोई बाध्यता नहीं है। कृपया सलाह दें !! –