बेस क्लास A
में उप-वर्ग B
है, और B
में उप-वर्ग C
है। A
वर्चुअल विधि doStuff()
लागू करता है, B
नहीं करता है, और C
करता है। C
से, मैं A
कॉल करना चाहते हैं '(रों doStuff()
के कार्यान्वयन doStuff()
की रों कार्यान्वयन मैं C
से कर' लेकिन यह है कि वास्तव में कोई फर्क नहीं करना चाहिए।) मैं बुलाना चाहिए:बेस क्लास
A::doStuff();
या:
B::doStuff();
पहला स्पष्ट लगता है क्योंकि यह वास्तविक कार्यान्वयन को संदर्भित करता है। दूसरी तरफ, दूसरा और अधिक उपयोगी हो सकता है यदि मैंने बाद में B
को A
से अलग की आवश्यकता है। कौन सा मानक है? कौन सा खतरनाक है?
मुझे आश्चर्य हुआ कि B::doStuff()
ने कोई चेतावनी ट्रिगर नहीं की है, लेकिन मुझे लगता है कि परिभाषा B
के आधार पर यह भी है कि यह बेस क्लास से है। क्या आधार वर्गों और कार्यान्वयन की श्रृंखला मनमाने ढंग से लंबी और जटिल हो सकती है? उदाहरण के लिए, अगर A
Z
के माध्यम से, प्रत्येक पिछले के उप-वर्ग में, क्या मैं श्रृंखला में कहीं भी कार्यान्वयन कर सकता हूं, और किसी वर्ग की विधि को कॉल करने से यह केवल 'चेन अप' तक जाता है जब तक कि इसे कार्यान्वयन नहीं मिल जाता?
यह एक बहुत साफ और उपयोगी विकल्प की तरह दिखता है। – Luke