typescript - टाइपस्क्रिप्ट में एक शुद्ध अमूर्त वर्ग को लागू करने बनाम बनाम




abstract-class extends (3)

आपके द्वारा दिए गए विस्तार के उदाहरण में, आप वास्तव में कक्षा में कुछ भी नया नहीं जोड़ते हैं। तो यह कुछ भी नहीं द्वारा बढ़ाया जाता है। हालांकि कुछ भी नहीं द्वारा मान्य टाइपस्क्रिप्ट यह मेरे लिए प्रतीत होता है कि इस मामले में 'लागू' अधिक उपयुक्त होगा। लेकिन दिन के अंत में वे बराबर हैं।

मान लीजिए कि मेरे पास एक शुद्ध अमूर्त वर्ग है (यानी, बिना किसी कार्यान्वयन के एक अमूर्त वर्ग):

abstract class A {
    abstract m(): void;
}

जैसे C # और Java में, मैं अमूर्त वर्ग का विस्तार कर सकता हूं :

class B extends A {
    m(): void { }
}

लेकिन C # और Java के विपरीत , मैं अमूर्त वर्ग को भी लागू कर सकता हूं:

class C implements A {
    m(): void { }
}

B और C कक्षाएं अलग तरह से कैसे व्यवहार करती हैं? मैं एक बनाम दूसरे को क्यों चुनूंगा?

(वर्तमान में, टाइपस्क्रिप्ट handbook और भाषा विनिर्देश सार कक्षाओं को कवर नहीं करते हैं।)


मुझे यहां नेतृत्व किया गया था क्योंकि मैं सिर्फ अपने आप से एक ही सवाल पूछ रहा था और जवाबों को पढ़ते समय मुझे यह समझ में आया कि चुनाव का असर instanceof ऑपरेटर पर भी पड़ेगा।

चूंकि एक अमूर्त वर्ग एक वास्तविक मूल्य है जो जेएस के लिए उत्सर्जित हो जाता है, इसका उपयोग रनटाइम चेक के लिए किया जा सकता है जब एक उपवर्ग इसका विस्तार करता है।

abstract class A {}

class B extends A {}

class C implements A {}

console.log(new B() instanceof A) // true
console.log(new C() instanceof A) // false

इम्प्लीमेंट्स कीवर्ड A क्लास को एक इंटरफ़ेस के रूप में मानता है, जिसका अर्थ है कि C को A में परिभाषित सभी विधियों को लागू करना है , भले ही उनका कार्यान्वयन A में हो या न हो। इसके अलावा C में सुपर मेथड के लिए कोई कॉल नहीं है

कीवर्ड से आप जो अपेक्षा करते हैं, वह अधिक व्यवहार करता है। आपको केवल अमूर्त विधियों को लागू करना होगा, और सुपर कॉल उपलब्ध / उत्पन्न होंगे।

मुझे लगता है कि अमूर्त तरीकों के मामले में इससे कोई फर्क नहीं पड़ता। लेकिन आपके पास शायद ही कभी केवल सार विधियों के साथ एक वर्ग है , अगर आप इसे केवल एक इंटरफ़ेस में बदलने के लिए बेहतर होगा।

आप इसे आसानी से उत्पन्न कोड को देखकर देख सकते हैं। मैंने here एक खेल का मैदान बनाया।






implements