2012-03-21 11 views
5

मैं ग्रहण चेकस्टाइल प्लगइन का उपयोग कर रहा हूं। यह सार या अंतिम घोषित किया जाना चाहिए - मैं एक वर्ग एक में कुछ तरीके जो वर्ग बी में ओवरराइड नहीं कर रहा निम्न विधियोंचेक स्टाइल क्यों सुझाव देता है कि मैं अंतिम विधि का उपयोग करता हूं?

समारोह SearchAndReplace
प्राप्त की जा करने के लिए कल्पना नहीं कर रहा है के अधिकांश के लिए चेतावनी है है या इसे खाली छोड़ दें।

क्या कोई विधि अंतिम रूप देने की कोई लाभ है?

संपादित

मुझे पता है कि कीवर्ड का अंतिम के लिए है। मुझे पता है कि यह विधियों को ओवरराइड करने से रोकता है, क्या अन्य फायदे हैं, जैसे प्रदर्शन या ऐसा कुछ भी?

+1

अंतिम विधि को ओवरराइड नहीं किया जा सकता है! – Rakesh

+1

मुझे यह जानकर उत्सुकता है कि प्लगइन कैसे जान सकता है कि विधि को किस तरह से कल्पना की गई थी। – EJP

उत्तर

12

जब आप अंतिम होने की विधि घोषित करते हैं, तो आप कह रहे हैं कि विधि को ओवरराइड नहीं किया जा सकता है। जावा भाषा विशिष्टता से

उद्धरण:

एक विधि अधिभावी या यह छुपा से उपवर्गों को रोकने के लिए अंतिम घोषित किया जा सकता।

यह अंतिम विधि को ओवरराइड या छुपाने का प्रयास करने के लिए एक संकलित-समय त्रुटि है।

आम नारा (वजह से यहोशू बलोच के लिए मेरा मानना ​​है कि)

                      कि "डिजाइन और विरासत के लिए या फिर प्रतिबंधित दस्तावेज यह"

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

0

जावा में, अंतिम कीवर्ड विभिन्न संदर्भ में लागू किया जाता है:

अंतिम कीवर्ड में संशोधक का मतलब अंतिम वर्ग बढ़ाया नहीं जा सकता, एक चर बदला नहीं जा सकता, और यह भी एक विधि कर सकते है ओवरराइड नहीं होगा।

4

final विधि गारंटी देता है कि कोई सबक्लास इस विधि को ओवरराइड नहीं करेगा। संभावना है कि रनटाइम प्रदर्शन लाभ के लिए इसका लाभ उठा सकता है (जो मामूली हो सकता है)।

विधि बनाने के लिए मुख्य कारण final विधि को ओवरराइड करने वाले उत्तराधिकारी को रोकने के लिए है। यह एक महत्वपूर्ण विचार हो सकता है (उदाहरण के लिए, bool checkSecurity() नामक एक विधि की कल्पना करें - दूसरों को ओवरराइड करने की अनुमति देना बुरा होगा!)

0

जब किसी विधि को अंतिम रूप में घोषित किया जाता है तो इसे कन्स्ट्रक्टर में शामिल किया जाना चाहिए (जब तक अन्य गैर अंतिम विधियां न हों इसमें शामिल)। यदि यह अंतिम उपखंड नहीं है तो इसे इस तरह से ओवरराइड कर सकते हैं जो सबक्लास में पेश किए गए फ़ील्ड तक पहुंचने का प्रयास करता है। और यह अक्सर आप अपेक्षा नहीं करेंगे। मुझे लगता है कि जब आप मोबाइल उपकरणों के लिए लिखते हैं तो कुछ प्रदर्शन लाभ होता है लेकिन मैं वहां विशेषज्ञ नहीं हूं।

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