2010-03-16 10 views
6

दोनों अमूर्त और आभासी बच्चे वर्ग में एक अंतर के मुकाबले ओवरराइड होने जा रहे हैं।अमूर्त और आभासी के बीच क्या अंतर है?

क्या यह वर्चुअल विधि में शरीर है और सार केवल एक हस्ताक्षर है ????

+0

एक के रूप में अलग रूप में, आंशिक तरीकों, सार तरीकों के विपरीत, आप कार्यान्वयन कि अधिरोहित जा की जरूरत नहीं है बिना तरीकों बनाने के लिए अनुमति देते हैं। – Brian

उत्तर

24

क्या यह वर्चुअल विधि में शरीर और सार केवल हस्ताक्षर है ????

बिल्कुल। मुद्दा यह है कि वर्चुअल विधियों व्युत्पन्न कक्षाओं में ओवरराइड हो सकते हैं, जबकि अमूर्त विधियां को ओवरराइड किया जाना चाहिए। इसी तरह, एक वर्ग जिसमें कम से कम एक अमूर्त विधि हो, वह स्वयं सार होना चाहिए, यानी इसके कार्यान्वयन (आंशिक रूप से) गायब होने के बाद से इसे तुरंत चालू नहीं किया जा सकता है।

अंत में, प्रत्येक सार विधि भी आभासी द्वारा आभासी है। virtual मूल रूप से इसका मतलब है कि विधि को रनटाइम पर सही कक्षा में भेजा जाता है, और इसलिए इसे रनटाइम पॉलीमोर्फिज्म को लागू करने के लिए ओवरराइड किया जा सकता है।

+0

चूंकि अमूर्त विधियों को अधिलेखित किया जाना चाहिए, इसलिए वे वास्तव में इंटरफेस और कोड जैसे अनुबंध को संकलित करेंगे जब तक कि आप उन्हें सही तरीके से लागू नहीं करते हैं, इसलिए यह आपके कोड के उपयोगकर्ताओं को लागू करने के लिए कोड का उपयोग करने का एक तरीका है, विशेष रूप से यदि वे आलसी हैं , सही बात? – Xaisoft

+0

@Xaisoft सही, लेकिन आभासी (गैर-सार) विधियां भी अनुबंध बनाती हैं क्योंकि अनुबंध कक्षाओं (= क्लाइंट) का उपयोग करने के परिप्रेक्ष्य से होता है। यह सब महत्वपूर्ण है कि एक ग्राहक उस वर्ग के कार्यों का उपयोग कर सकता है जो इसका विज्ञापन करता है। –

+1

मैं सहमत हूं, लेकिन मेरा मतलब यह था कि यदि आप एक विधि वर्चुअल घोषित करते हैं, तो क्लाइंट को इसे लागू करने की आवश्यकता नहीं होती है, भले ही उन्हें चाहिए। इसके अलावा एक वर्चुअल विधि में डिफ़ॉल्ट व्यवहार हो सकता है। एक ग्राहक को एक अमूर्त विधि को लागू करना होता है और इसमें डिफ़ॉल्ट व्यवहार नहीं हो सकता है। ऐसा लगता है कि आप वर्चुअल रूट बनाम अमूर्त मार्ग पर जाने का एकमात्र कारण यह था कि यदि आप वाकई वास्तव में एक विधि को लागू करना चाहते थे और इसे क्लाइंट पर रखा जाए। – Xaisoft

17

सार का अर्थ है कि आपको इसे ओवरराइड करना होगा। आभासी मतलब है कि आप इसे ओवरराइड कर सकते हैं। ज्यादा या कम।

+4

उसमें जोड़ना: अपनी कक्षा में अमूर्त विधियों के साथ आपकी पूरी कक्षा अमूर्त होगी जिसका अर्थ है कि आप इस वर्ग के उदाहरण नहीं बना सकते हैं, केवल व्युत्पन्न गैर-सारणी उप-वर्गों का। – dbemerlin

1

मैं दोनों उत्तरों के साथ सहमत हूं, इसलिए मैं उन्हें दोहराना नहीं चाहूंगा। लेकिन यहां एक लिंक है जो मदद कर सकता है।

10.6.3 Virtual, sealed, override, and abstract accessors

संबंधित मुद्दे