बस जावा का उपयोग शुरू करना। मुझे .NET के साथ बहुत सारी समानताएं मिलती हैं, लेकिन मुझे लगता है कि जावा में सभी विधियां डिफ़ॉल्ट रूप से आभासी हैं। तो प्रश्न यह है कि मैं उन्हें गैर वर्चुअल बनाने के लिए क्या कर सकता हूं? final
कीवर्ड एक और सही समाधान है?जावा में गैर वर्चुअल विधियां
उत्तर
हाँ, या निजी
लेकिन 'निजी' - जैसे ही .net - विधि को अन्य वर्गों के कॉल के लिए अनुपलब्ध बनाता है, साथ ही साथ ओवरराइडिंग को रोकता है। –
लेकिन जब मैं अभिभावक वर्ग में उसी नाम के साथ बाल वर्ग में कोई विधि रखने की आवश्यकता हो तो मैं क्या कर सकता हूं। सी # में ऐसे मामलों के लिए एक कीवर्ड नया है ... जावा में कुछ ऐसा ही है। – NixDev
नहीं, कुछ भी नहीं –
, आप भी अंतिम रूप पूरे वर्ग को परिभाषित कर सकते हैं। मैं यह नहीं कह रहा हूं कि यह अच्छी या बुरी शैली है या नहीं।
यदि आप प्रदर्शन के लिए विधि को गैर-वर्चुअल बनाने का लक्ष्य रखते हैं, तो JIT को तब तक सौदा करने दें जब तक आपके पास सबूत न हो कि यह नहीं कर रहा है।
यदि विधि गैर-आभासी बनाने के कारण को उप-वर्ग में परिभाषित करने में सक्षम होना है, लेकिन बहुरूपता शामिल नहीं है, तो संभवतः आप किसी वास्तविक कारण के लिए उप-वर्गीकरण कर रहे हैं (यदि आप इसे चुनना चाहते हैं तो अधिक कोड पोस्ट करें)।
यदि यह डिज़ाइन के लिए है, तो मैं संभवतः व्यक्तिगत तरीकों के बजाय कक्षा को अंतिम बनाने का सुझाव दूंगा। आईडीईए के पास क्लास डिज़ाइन के लिए अच्छे निरीक्षण हैं। उन लोगों के प्रति बहुत बारीकी से न सुनने की कोशिश करें जो चाहते हैं कि आप सब कुछ खुला छोड़ दें ताकि वे बग या सीमाओं के आसपास हैक करने के लिए उपclass कर सकें; जब आप गलती से अपने उप-वर्ग को तोड़ते हैं तो वे आपके ऊपर और भी जोर से चिल्लाएंगे।
ग्राहकों को अपने स्वयं के प्रकार को जोड़ने के बजाय अपने स्वयं के प्रकार जोड़ने का एक तरीका प्रदान करें और शायद यह भी ध्यान नहीं देगा कि आपकी कक्षाएं अंतिम हैं।
इसे स्थिर बनाएं।
यदि आप एक गैर-वर्चुअल विधि कहते हैं तो आप अपने कोड से जानना चाहते हैं कि आप किस क्लास विधि को कॉल कर रहे हैं। .NET की दोष यह है कि आप अपने कोड से नहीं जान सकते हैं।
उदाहरण
जावा में यदि आप के रूप में
public class ClassB extends ClassA {
@Override
public void run() {
}
}
ClassB को परिभाषित करने और वस्तु
ClassA obj=new ClassB();
यदि आप obj.run फोन() आप अगर उस कोड है कैसे पता चल जाएगा पॉलिमॉर्फिक ओपन/क्लोज़ सिद्धांत के नियमों का पालन करते हुए या क्लास से संबंधित कोड विधि होगी? जावा में आपको पता चलेगा कि हमेशा polymorphism है। मोक्स बनाना आसान है और कक्षाओं का विस्तार करना और लिस्कोव प्रतिस्थापन सिद्धांत का पालन करना आसान है।
दूसरी ओर स्थिर तरीकों पर एक वर्ग को घिरा रहे हैं इसलिए यदि आप एक विधि है कि ClassA से संबंधित है कॉल करना चाहते हैं तो आप इस तरह है कि विधि को परिभाषित कर सकते हैं:
public static run(ClassA obj)
और आप
साथ यह कॉल कर सकते हैंClassB obj=new ClassB();
ClassA.run(obj);
और कोड से आपको पता चलेगा कि जिस विधि को आप बुला रहे हैं उसे क्लास में परिभाषित किया गया है, न कि क्लासबी में।
नहीं। ऑब्जेक्ट से संबंधित होने पर विधि को स्थिर न करें। यह वास्तव में खराब डिजाइन है। – Cephalopod
- 1. अंतिम श्रेणी में गैर-अंतिम विधियां
- 2. जावा में वर्चुअल जॉयस्टिक
- 3. जावा में बहिष्कृत दिनांक विधियां?
- 4. सी # में निजी वर्चुअल विधियां अवैध क्यों हैं?
- 5. जावा कॉलबैक विधियां
- 6. वर्चुअल वर्चुअल वर्चुअल वर्चुअल में बदलें और बाइनरी संगत
- 7. गैर-विशेषाधिकार प्राप्त विधियां क्यों बनाते हैं?
- 8. वर्चुअल फ़ंक्शन कॉन्स बनाम वर्चुअल फ़ंक्शन गैर-कॉन्स
- 9. जावा में जादुई रूप से कॉल विधियां
- 10. जावा में सार कक्षाएं और विधियां, विरासत
- 11. डब्ल्यूसीएफ रेस्ट सर्विस में वेबगेट और गैर वेबगेट विधियां
- 12. जावा वर्चुअल मशीन
- 13. जावा वर्चुअल मशीन
- 14. जावा वर्चुअल मशीन आंतरिक
- 15. जावा वर्चुअल मशीन
- 16. जावा - वर्चुअल तरीके
- 17. त्रुटि: जावा वर्चुअल मशीन
- 18. जावा में गैर-अपरकेस स्थिरांक
- 19. क्लोजर वर् और जावा स्थैतिक विधियां
- 20. क्या सरणी में जावा स्टोर विधियां कर सकती हैं?
- 21. जावा गैर-अवरुद्ध सॉकेट
- 22. Maven गैर जावा फ़ाइलों
- 23. निजी वैरिएबल तक पहुंचने वाली जावा स्थैतिक विधियां
- 24. क्यों एक गैर स्थैतिक आंतरिक वर्ग में स्थिर सदस्य (फ़ील्ड और विधियां) नहीं हो सकती हैं?
- 25. वर्चुअल विधि को ओवरलोड करने से गैर-वर्चुअल विधि से भिन्न होता है?
- 26. सी ++ संकलन के दौरान 'वर्चुअल विधि ... लेकिन गैर-वर्चुअल विनाशक' चेतावनी का क्या अर्थ है?
- 27. `boost :: multi_array_ref` गैर-वर्चुअल का विनाशक क्यों है?
- 28. पैरामीटर खराब अभ्यास के साथ गैर शुद्ध वर्चुअल फ़ंक्शन हैं?
- 29. पैकेज संरचना में गैर-जावा फाइलें
- 30. जावा में असीमित गैर-अवरुद्ध दूरस्थ लॉगिंग?
http://download.oracle.com/javase/tutorial/java/IandI/final.html –
मुझे लगता है कि, मुझे 'सी # .NET' में 'जावा' के साथ बहुत सारी समानताएं मिलीं ... जैसा कि ia है मेरे पिता के साथ कुछ समानताएं ... –
@ गारिस आपका अंक नहीं प्राप्त कर सकता ... यह सवाल से कैसे जुड़ा हुआ है? – NixDev