सी ++ में एकाधिक विरासत है। असेंबली स्तर पर एकाधिक विरासत का कार्यान्वयन काफी जटिल हो सकता है, लेकिन यह सामान्य रूप से कैसे किया जाता है (vtables, सूचक फिक्सअप, थंक्स इत्यादि) पर descriptions अच्छा है।जावा इंटरफेस आंतरिक रूप से कैसे कार्यान्वित किए जाते हैं? (vtables?)
जावा में एकाधिक कार्यान्वयन विरासत नहीं है, लेकिन इसमें एकाधिक इंटरफ़ेस विरासत है, इसलिए मुझे नहीं लगता कि प्रति वर्ग एक एकल vtable के साथ सीधे आगे कार्यान्वयन इसे कार्यान्वित कर सकता है। जावा आंतरिक रूप से इंटरफेस कैसे कार्यान्वित करता है?
मुझे एहसास है कि सी ++ के विपरीत, जावा जिट संकलित है, इसलिए कोड के अलग-अलग टुकड़े अलग-अलग अनुकूलित किए जा सकते हैं, और विभिन्न जेवीएम अलग-अलग काम कर सकते हैं। तो, क्या कोई सामान्य रणनीति है कि कई JVMs इस पर अनुसरण करते हैं, या क्या किसी को किसी विशिष्ट JVM में कार्यान्वयन पता है?
इसके अलावा जेवीएम अक्सर वर्चुअल और इनलाइन विधि कॉल करते हैं, इस मामले में कोई vtables या समकक्ष शामिल नहीं है, इसलिए वास्तविक वर्चुअल/इंटरफ़ेस विधि कॉल को लागू करने वाले वास्तविक असेंबली अनुक्रमों के बारे में पूछने का अर्थ नहीं हो सकता है, लेकिन मुझे लगता है कि अधिकांश JVMs अभी भी उपयोग करने के लिए कक्षाओं के किसी प्रकार का सामान्य प्रतिनिधित्व रखते हैं यदि वे सब कुछ devirtualize करने में सक्षम नहीं हैं। क्या यह धारणा गलत है? क्या यह प्रतिनिधित्व किसी भी तरह से C++ vtable जैसा दिखता है? यदि ऐसा है तो इंटरफेस में अलग-अलग vtables हैं और ये क्लास vtables से कैसे जुड़े हुए हैं? यदि ऐसा है तो ऑब्जेक्ट्स में एकाधिक vtable पॉइंटर्स (कक्षा/इंटरफ़ेस vtables के लिए) जैसे C++ में ऑब्जेक्ट इंस्टेंस हो सकते हैं? एक वर्ग प्रकार के संदर्भ और एक ही ऑब्जेक्ट को एक ही ऑब्जेक्ट में हमेशा एक ही बाइनरी मान होता है या क्या यह C++ में भिन्न हो सकता है जहां उन्हें पॉइंटर फ़िक्सअप की आवश्यकता होती है?
(संदर्भ के लिए: this question CLR के बारे में कुछ इसी तरह पूछता है, और वहाँ this msdn article में एक अच्छा विवरण होने के लिए यह है कि अब तक पुरानी हो सकती है मैं जावा के लिए इसी तरह की कुछ भी खोजने के लिए नहीं कर पाए हैं प्रकट होता है।।)
संपादित करें:
- मैं 'औजार' 'कैसे जीसीसी संकलक पूर्णांक अलावा/फ़ंक्शन कॉल/आदि को लागू करता है "के अर्थ में," के जावा वर्ग ArrayList अर्थ में नहीं मतलब सूची इंटरफ़ेस लागू करता है "।
- मुझे पता है कि यह जेवीएम बाइटकोड स्तर पर कैसे काम करता है, जो मैं जानना चाहता हूं कि जेवीएम द्वारा क्लास फाइलों को लोड करने और बाइटकोड को संकलित करने के बाद किस प्रकार का कोड और डेटास्ट्रक्चर उत्पन्न होता है।
आप इंटरफ़ेस विरासत और कार्यान्वयन विरासत का उल्लेख करते हैं। कार्यान्वयन विरासत मुश्किल है क्योंकि आपको परिभाषित खोज आदेश होना चाहिए। इंटरफेस विरासत रास्ता आसान है। आपके पास बस सभी विधि हस्ताक्षर वाले मानचित्र हैं जिन्हें कार्यान्वित करने की आवश्यकता है। कोई खोज आदेश आवश्यक नहीं है (क्योंकि इसमें कोई कार्यान्वयन नहीं है)। वहां कोई आदेश नहीं है। – extraneon