वर्चुअल फ़ंक्शन इनहेरिटेंस के दृश्यों के पीछे कैसे काम करता है? क्या संकलक विशेष रूप से आभासी कार्यों का इलाज करता है?जावा - वर्चुअल तरीके
उत्तर
हां, आभासी विधियों को संकलक और रनटाइम द्वारा अलग तरीके से इलाज किया जाता है। JVM विशेष रूप से आभासी विधि प्रेषण के लिए एक virtual method table का इस्तेमाल करता है:
वस्तु का प्रेषण तालिका वस्तु की गतिशील बाध्य तरीकों के पते शामिल होंगे। विधि कॉल ऑब्जेक्ट की प्रेषण तालिका से विधि का पता लाने के द्वारा किया जाता है। प्रेषण तालिका एक ही कक्षा से संबंधित सभी ऑब्जेक्ट्स के लिए समान है, और इसलिए आमतौर पर उनके बीच साझा की जाती है। वस्तुओं से संबंधित टाइप-संगत वर्गों (एक वंशानुगत पदानुक्रम में उदाहरण के भाई बहन के लिए) एक ही लेआउट के साथ प्रेषण टेबल होगा: किसी दिए गए विधि का पता ही पर दिखाई देगा सभी प्रकार संगत वर्गों के लिए ऑफसेट । इस प्रकार, दिए गए विधि के पते को प्राप्त करने के लिए प्रेषण तालिका ऑफसेट ऑब्जेक्ट की वास्तविक कक्षा से संबंधित विधि प्राप्त करेगा।
जावा में सभी विधियां डिफ़ॉल्ट रूप से आभासी हैं। इसका मतलब है कि विरासत में उपयोग किए जाने पर किसी भी विधि को ओवरराइड किया जा सकता है, जब तक कि उस विधि को अंतिम या स्थैतिक घोषित न किया जाए।
'वर्चुअल' एक सी ++ शब्द है। जावा में कोई वर्चुअल विधियां नहीं हैं। सामान्य विधियां हैं, जो रनटाइम-पॉलिमॉर्फिक हैं, और स्थैतिक या अंतिम विधियां हैं, जो नहीं हैं।
यहां कुछ त्रुटि? जरुर बताएं। – EJP
मैंने डाउनवोट नहीं किया हालांकि मुझे लगता है कि "जावा में सभी विधियां डिफ़ॉल्ट रूप से आभासी हैं" कथन बेहतर है। जबकि जावा में कोई विशिष्ट "आभासी" संशोधक नहीं है, अंतर्निहित अवधारणा अभी भी वही है। दावा करते हुए कि कोई वर्चुअल विधियां आईएमएचओ – ChrisWue
@ChrisWue पर थोड़ा भ्रामक नहीं है लेकिन आपका संस्करण सत्य नहीं है। स्टेटिक विधियां किसी भी अर्थ में वर्चुअल नहीं हैं, या रनटाइम-पॉलिमॉर्फिक या तो। मेरा संस्करण कैप्चर करता है: आपका नहीं है। और ओकहम का रेज़र निर्देश देता है कि आप अवधारणाओं को बिना किसी चीज से गुणा करते हैं। जावा पर चर्चा करते समय 'आभासी' शब्द की कोई आवश्यकता नहीं है, भाषा में कहीं भी ज्यादा है। – EJP
- 1. योग्य वर्चुअल तरीके ओवरराइडिंग
- 2. वर्चुअल तरीके या फ़ंक्शन पॉइंटर्स
- 3. जावा वर्चुअल मशीन आंतरिक
- 4. जावा वर्चुअल मशीन
- 5. जावा वर्चुअल मशीन
- 6. त्रुटि: जावा वर्चुअल मशीन
- 7. जावा में वर्चुअल जॉयस्टिक
- 8. जावा वर्चुअल मशीन
- 9. जावा में गैर वर्चुअल विधियां
- 10. जावा में स्टेटिक तरीके
- 11. जावा: 'स्थैतिक' तरीके
- 12. क्या Google V8 जावा वर्चुअल मशीन के समान तरीके से काम करता है?
- 13. वर्चुअल वर्चुअल वर्चुअल वर्चुअल में बदलें और बाइनरी संगत
- 14. सी ++ और जावा: वर्चुअल बेस क्लास
- 15. जावा की वर्चुअल मशीन और सीएलआर
- 16. Dalvik या जावा वर्चुअल मशीनों पर संदर्भ?
- 17. जावा की वर्चुअल मशीन की एंडियननेस
- 18. वर्चुअल विधि
- 19. वर्चुअल
- 20. जावा वर्चुअल मशीन में स्टार्ट-अप समय क्या लिखता है?
- 21. वापसी जावा जेनेरिक तरीके का प्रकार
- 22. जावा में पैरामीटर्स के साथ तरीके
- 23. जावा में स्टेटिक प्रारंभकर्ता और स्टेटिक तरीके
- 24. सर्कुलर तरीके से जावा सरणी ट्रैवर्सल
- 25. धागे में चल रहे जावा तरीके
- 26. जावा जेनरिक, सिंगलेट और स्थिर तरीके
- 27. तरीके?
- 28. वर्चुअल टेबल बनाम वर्चुअल टेबल SQLite डीबी
- 29. वर्चुअल टेक्स्ट का उपयोग वर्चुअल टेक्स्ट 2
- 30. वर्चुअल मशीन ऑप्टिमाइज़ेशन
गैर स्थैतिक (उदाहरण) विधियां हमेशा आभासी होती हैं। स्टेटिक (कक्षा) विधियां कभी आभासी नहीं होती हैं। आप उस वर्चुअल विधि में सही हैं जिसे अंतिम घोषित किया गया है जिसे व्युत्पन्न वर्ग में ओवरराइड नहीं किया जा सकता है। –
क्या आप रचनाकार को नहीं भूलते हैं। –
@JerryLiu यह निर्भर करता है कि क्या आप निर्माता को एक विधि मानते हैं या नहीं। मेरा मानना है कि समुदाय अभी भी उस विषय पर सहमत नहीं है। –